Zoho Projects 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/{portal_id}/tasks   -H "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

What's New in V3

Version-3 (V3) builds on the existing Zoho Projects API by introducing a more consistent structure across endpoints and extending support for common integration needs. Updates to areas like date formats, filtering, custom fields, and pagination make it easier to work with data in a predictable way. In this section, you'll find what's new in v3, what has been updated, and what to review when moving from v2.

V3 API - Quick Example

GET /api/v3/portal/{portal_id}/projects Authorization: Bearer {token} Response: { "page_info": { "page": 1, "per_page": 100, "page_count": 100, "has_next_page": true }, "projects": [...], }
Enhancements in v3 API

V3 introduces a more consistent and structured way to work with the Zoho Projects API. It simplifies how data is formatted, how requests are constructed, and how responses are handled, making integrations easier to build and maintain. These updates also bring more clarity when working with filters, custom fields, and large datasets.

V3 Improvements at a Glance

// 1. Dates → ISO 8601 "due_date": "2024-05-26T00:00:00.000Z" // 2. Filtering → one request "filter": { "criteria": [ { "field_name": "status", "criteria_condition": "all_open" } ], "pattern": "1" } // 3. Custom fields → api_name "cf_priority_level": "High" // 4. Request = Response "assignee": { "zpuid": "...", "name": "John Doe" } // 5. Pagination → page-based "page_info": { "page": 1, "per_page": 100, "page_count": 100, "has_next_page": true }
Consistent Date and Time Format

All date and time values follow a single ISO 8601 format across endpoints. This ensures consistent parsing and removes the need to handle multiple formats.

Type V2 V3
Date only "05-26-2014" (MM-DD-YYYY) "2024-05-26" (YYYY-MM-DD)
Datetime "05-13-2014 05:57 PM" (12-hour) "2024-05-26T11:25:58.000Z" (ISO 8601)
Human-readable "May 26, 2014" removed
Epoch 1399620397255 removed
Date input format MM-DD-YYYY YYYY-MM-DD

The *_long epoch fields are removed. ISO 8601 timestamps are universally parseable.

Advanced Filtering

You can define multiple conditions within a single request using a structured filter object. Filtering is processed entirely on the server, so only relevant records are returned.

  • Supported conditions:
    • is
    • is_not
    • contains
    • starts_with
    • before
    • after
    • is_empty
    • is_not_empty
    • between
  • Pattern logic: Combine conditions using AND, OR, and grouping - e.g. "(1 OR 2) AND 3"
  • Custom field support: Use the api_name of any custom field as the criteria field_name

For the complete syntax reference, see the Filter Guide.

Advanced Filter - Overdue & Assigned

{ "filter": { "criteria": [ { "field_name": "due_date", "criteria_condition": "today", }, { "field_name": "assignee", "criteria_condition": "is", "value": "user_zpuid" } ], "pattern": "1 AND 2" } }
Standardized Custom Fields

Custom fields now use clear and consistent api_name values. This makes it easier to reference them across requests, filters, and responses without additional mapping.

V2 V3
In requests UDF_CHAR1, UDF_LONG2 expected_date, priority_level
In responses Same UDF_ keys, no context Same api_name, consistent everywhere
  • Stable references - field identifiers don't shift when other fields are added or removed
  • Works everywhere - same api_name in requests, responses, and filter criteria

For full details, see Custom Fields.

V3 Custom Field in Response

{ "expected_date": "2024-05-26" }

V3 Custom Field in Filter

{ "criteria": [ { "field_name": "expected_date", "criteria_condition": "is", "value": "2024-05-26" } ] }
Request and Response Structure

The same field structure is used in both requests and responses. This improves predictability and reduces the need for transformation logic when handling API data.

Aspect V2 /restapi V3 /api/v3
Content Type application/x-www-form-urlencoded application/json
Body Style Flat, form-encoded parameters JSON body, nested objects
Dates Mixed formats (MM-DD-YYYY, epoch, text) ISO 8601 everywhere
Related Data Flat fields (person_responsible, assignee_name) Grouped objects (assignee, status)
List Responses No pagination metadata page_info block with has_next_page

V3 Request (JSON)

POST /api/v3/portal/{portal_id}/projects/{project_id}/tasks Content-Type: application/json { "name": "Task Name", "assignee": { "zpuid": "user_id" }, "due_date": "2024-05-26", "priority": "High" }

V3 Response

{ "page_info": { "page": 1, "per_page": 100, "page_count": 100, "has_next_page": true }, "tasks": [ { "id": "12345", "name": "Task Name", "due_date": "2024-05-26T00:00:00.000Z", "assignee": { "zpuid": "...", "name": "John Doe", "email": "..." }, "status": { "id": "...", "name": "Open", "color": "#...", "is_closed_type": false } } ] }
Pagination

Pagination is now page-based, making it easier to work with large datasets.

  • Use page and per_page to control results
  • has_next_page indicates if more records are available
  • Avoids duplicate or skipped records
  • No need for manual offset calculations

For full details and examples, see Pagination.

Base URL Structure

All endpoints in v3 follow a consistent URL pattern. The base URL is simplified and standardized, and trailing slashes are no longer required. This makes it easier to construct and predict endpoint URLs across the API.

V2 V3
Base URL /restapi/portal/{portal_id}/projects/ /api/v3/portal/{portal_id}/projects
Trailing slashes Some endpoints require trailing / No trailing slashes
Operation V2 V3
List tasks GET /restapi/portal/{portal_id}/projects/{project_id}/tasks/ GET /api/v3/portal/{portal_id}/projects/{project_id}/tasks
Note
  • If you're migrating from V2, update all endpoint URLs - the /restapi/ prefix is replaced with /api/v3/.
Quick Comparison
Area V2 (/restapi) V3 (/api/v3)
URL Pattern /restapi/portals/ /api/v3/portals
Date Format "05-26-2014" or "May 26, 2014" or 1399620397255 "2024-05-26" (date only) or "2024-05-26T11:25:58.000Z" (ISO 8601)
Pagination index + range (offset-based) page + per_page with has_next_page
HTTP Method for Updates POST PATCH
Custom Fields UDF_ prefix (e.g. UDF_CHAR1) api_name (e.g. "expected_date")
Request / Response Schema Fields sent in requests often differed from response field names Request and response use the same field structure throughout
API Coverage Limited modules and endpoints Additional modules and endpoints, significantly expanding the overall API surface area

V3 Update Task Example

PATCH /api/v3/portal/{portal_id}/projects/{project_id}/tasks/{task_id} Content-Type: application/json { "assignee": { "zpuid": "user_id" }, "due_date": "2024-05-26", "cf_priority_level": "High" }
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

INVALID_OAUTHTOKEN 400

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

Resolution: Regenerate OAuthToken and try again.

INVALID_OAUTHTOKEN

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

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

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

INTERNAL_SERVER_ERROR 500

Server encountered an unexpected error. Contact

Resolution: support@zohoprojects.com

INTERNAL_SERVER_ERROR

API Limits

To ensure fair usage and maintain optimal performance for all users, Zoho Projects APIs are governed by rate limits.

Rate Limit Policy
  • Each API can be invoked up to 200 times within a 2-minute window.
  • The limit is applied per API endpoint.
Rate Limit Exceeded

If the number of requests exceeds the allowed limit:

  • The specific API will be temporarily blocked for 10 minutes.
  • During this period, all further requests to that API will fail.
  • A Retry-After header will be included in the response, indicating the remaining time (in seconds) before the API becomes available again.
Important Notes
  • The restriction applies only to the API that exceeds the limit, not all APIs.
  • After the 10-minute cooldown, the API will become available automatically.
  • Continuous violations may impact application performance and reliability.
Best Practices

To avoid hitting rate limits:

  • Implement retry mechanisms using the Retry-After header.
  • Use exponential backoff instead of immediate retries.
  • Avoid sending unnecessary or duplicate requests.
  • Use batch APIs (if available) to reduce the number of calls.
  • Cache frequently used data whenever possible.

Request

GET /api/v3/portal/{portal_id}/projects

Rate Limit Info

Rate Limit : 200 requests / 2 minutes Cooldown : 10 minutes Scope : Per user, per API Retry-After : 540 (seconds remaining)

v3 uses page-based pagination on all list endpoints. Pass page and per_page as query parameters to control which page of results is returned.

Query Parameters
Parameter Type Description
page Integer Page number (starting from 1). Defaults to 1 if omitted.
per_page Integer Number of records per page. Defaults to 100 if omitted. Supported values: 1-200.
Response

Every list response includes a page_info block. The has_next_page flag tells your client precisely when to stop fetching — no offset calculations, no risk of duplicate or skipped records.

Field Type Description
page Integer Current page number
per_page Integer Records per page
page_count Integer Total number of records in the result set
has_next_page Boolean true if more pages exist, false if this is the last page

Request

GET /api/v3/portal/{portal_id}/projects/{project_id}/tasks?page=2&per_page=50

page_info Response

{ "page_info": { "page": 2, "per_page": 50, "page_count": 10, "has_next_page": true } }
Custom Fields

Send custom field values when creating or updating records through Zoho Projects APIs.

Custom fields are configured within module layouts to capture additional information based on business needs. Use the corresponding field API names to pass values in the request payload.

For example, a checkbox custom field can be used to track a project condition, and its value can be submitted as true or false in the API request.

Note
  • Custom field API names are currently supported only in the Tasks and Projects APIs.
  • Use the Custom Fields metadata API to retrieve field details such as API names and field types before passing values.
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

{"Material": "Vinyl"}
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 currency code, formatted amount, currency ID, and raw amount. Maximum length: 100 characters

JSON Schema

{ "currency": { "currency_code": "string", "formatted_amount": "string", "amount": "number (required)" }}

Example

{ "cost_per_item": { "currency_code": "USD", "formatted_amount": "$ 5,353.54", "amount": 325.50 }}
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

{"tests_passed": 35 }
Decimal Field

Captures decimal values. Maximum length: 17 digits

JSON Schema

{ "key": "number"}

Example

{"accuracy": 21.05}
Email Field

Captures email addresses. Maximum length: 200 characters

JSON Schema

{ "key": "string"}

Example

{"email":"chris@zylker.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"}
Filter Guide

The filter query parameter in Zoho Projects v3 enables retrieving only records that match defined conditions. This approach avoids fetching all records and applying filtering on the client side. This guide explains how to construct filter payloads, available conditions, and supported value formats.

Note
  • Pass the filter parameter as a URL-encoded JSON string
  • Combine one or more conditions using a pattern expression

Filter Example

{ "criteria": [ { "field_name": "status", "criteria_condition": "all_open" } ], "pattern": "1" }

URL-Encoded Filter in GET Request

GET /api/v3/portal/{portal_id}/projects/{project_id}/tasks?filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22all_open%22%7D%5D%2C%22pattern%22%3A%221%22%7D

Filter Payload Structure

The filter payload is organized into key components that together represent how the conditions are defined and applied within a request : criteria and pattern.

Payload Properties
Property Data Type Description
criteria

Array

required
Each property within the filter payload represents a specific part of a condition, contributing to how fields, operators, and values are interpreted during filtering.
field_name

String

required
API name of the field to filter (e.g. status, due_date, name). Use the Get Field Info API to retrieve valid field names for a module.
criteria_condition

String

required
Filter operation. Available conditions depend on the field type. See Conditions Reference.
value

Array<String>

optional
Required for most conditions. Always an array. Omit for presets (all_open, today, is_empty). between requires exactly 2 values.
pattern

String

required
Defines how criteria are combined using AND / OR logic. References criteria by their 1-based index in the array order (e.g. first criterion = 1, second = 2). Example: "(1 AND 2) OR 3".
Pattern Syntax

The pattern shows how criteria are combined and evaluated together. Each condition is referenced by its position in the list (starting from 1), and operators like AND, OR are used to define the relationship between them. Parentheses () can be used to group conditions and control how they are applied. The pattern is always required, with "1" used when only a single condition is present.

PatternMeaning
"1"Single criterion
"1 AND 2"Both must match
"1 OR 2"Either can match
"1 AND 2 AND 3"All three must match
"(1 AND 2) OR 3"1 & 2 together, or 3 alone
Value Format Rules

The value field represents the input used to evaluate a condition and is always structured as an array of strings. It is required for most conditions, while presets do not include a value. Range-based conditions such as between using exactly two values, and the format varies based on the field type.

Data TypeFormatExampleNotes
TextString["review"]Single value for most conditions
Date (specific)YYYY-MM-DD["2024-11-04"]Single date value
Date (range)YYYY-MM-DD["2024-11-01", "2024-11-30"]Exactly 2 values for between / not_between
UserZPUID["4000000006061"]Single value for most conditions
Pick ListOption name["High"]Use the display name, not the ID
Multi Pick ListOption ID["4000000046001"]Use the option ID, not the display name
Check Box"true" / "false" or "1" / "0"["true"]Both formats accepted
NumericNumeric string["100"]Numbers passed as strings
Note
  • Only is and is_not support multiple values (e.g. ["high", "medium"]).
  • is with multiple values = OR logic (matches any).
  • is_not with multiple values = AND logic (excludes all).
  • All other conditions accept a single value (or exactly 2 for between / not_between).
  • Preset conditions (all_open, today, is_empty, etc.) do not require a value array.

AND Pattern

{ "criteria": [ { "field_name": "assignee", "criteria_condition": "is", "value": ["4000000006061"] }, { "field_name": "due_date", "criteria_condition": "this_month" } ], "pattern": "1 AND 2" }

OR Pattern

{ "criteria": [ { "field_name": "priority", "criteria_condition": "is", "value": ["high"] }, { "field_name": "milestone", "criteria_condition": "is_empty" } ], "pattern": "1 OR 2" }

Nested Pattern

{ "criteria": [ { "field_name": "status", "criteria_condition": "all_open" }, { "field_name": "due_date", "criteria_condition": "overdue" }, { "field_name": "assignee", "criteria_condition": "is", "value": ["4000000006061"] } ], "pattern": "(1 AND 2) OR 3" }
Conditions Reference
Text Conditions

Used for text-based fields such as name, email, and custom fields, where matching is based on keywords or exact values. All comparisons are case-insensitive.

ConditionAPI ValueWhat it doesValue
ContainscontainsMatches if the field has the substring anywhere["review"]
Doesn't containnot_containsExcludes records containing the substring["test"]
Starts withstarts_withMatches the beginning of the field value["API"]
Ends withends_withMatches the end of the field value["v2"]
IsisExact match. Multiple values = OR logic["High"] or ["High", "Medium"]
Is notis_notExcludes exact matches. Multiple values = AND logic["Low", "None"]
Tip
  • contains, not_contains, starts_with, and ends_with accept only a single value. Only is and is_not support multiple values in the array.
Comparison Conditions

Used for numeric and date fields, where values are evaluated based on comparisons like greater than, less than, or within a range.

ConditionAPI ValueWhat it doesValue
IsisExact match. Multiple values = OR logic["100"] or ["100", "200"]
Is notis_notExcludes exact matches. Multiple values = AND logic["0"]
Less thanless_thanField value is less than the given value["50"]
Less than or equalless_than_or_equalField value is less than or equal["50"]
Greater thangreater_thanField value is greater than the given value["50"]
Greater than or equalgreater_than_or_equalField value is greater than or equal["50"]
BetweenbetweenField value within range (inclusive)["10", "100"]
Not betweennot_betweenField value outside range["10", "100"]
Tip
  • For date fields, use YYYY-MM-DD format. Single value: ["2024-11-01"]. Range: ["2024-11-01", "2024-11-30"].
Date Presets

Includes ready-to-use conditions based on dates, evaluated relative to the current date without requiring manual input.

Relative to today:
ConditionWhat it matches
todayCurrent date
yesterdayPrevious day
tomorrowNext day
till_yesterdayAll dates up to yesterday
overduePast due date
today_overdueDue today & overdue
Week-based:
ConditionWhat it matches
this_weekCurrent week
last_weekPrevious week
next_weekUpcoming week
next_7_daysNext 7 days
Month-based:
ConditionWhat it matches
this_monthCurrent month
last_monthPrevious month
next_monthUpcoming month
next_30_daysNext 30 days
Null or Empty Date Fields:
ConditionWhat it matches
unscheduledNo date set
Status Presets

Includes predefined conditions that group records based on their status, such as open or closed.

ConditionDescription
all_openAll open statuses
all_closedAll closed statuses
Tip
  • To filter by a specific status, use is or is_not with the status ID. Example: "value": ["4000000012345"].
User Conditions

Used for fields related to users, including assignments, reporting structure, and user-specific states. (requires ZPUID in the value array):

ConditionAPI ValueWhat it does
IsisRecords assigned to the given user(s). Multiple values = OR logic
Is notis_notExcludes records assigned to the given user(s)
Direct reports ofdirect_reports_ofRecords assigned to direct reports of the given user
Subordinates ofsubordinates_ofRecords assigned to any subordinate of the given user

Presets (no value array needed):

ConditionAPI ValueWhat it matches
Deactivated usersdeactivated_usersRecords assigned to deactivated users
Deleted usersdeleted_usersRecords assigned to deleted users
Is team lead onlyis_team_lead_onlyRecords assigned to team leads only
PendingpendingRecords with pending user assignments
AcceptedacceptedRecords with accepted user assignments
Empty Condition

Used to identify fields that do not have any value assigned.

ConditionDescription
is_emptyField has no value
Tip
  • Useful for finding incomplete records, such as tasks with no due date or unassigned tasks.
  • For date fields, use unscheduled instead of is_empty to filter records with no date set.

Text: Contains

{ "criteria": [ { "field_name": "name", "criteria_condition": "contains", "value": ["review"] } ], "pattern": "1" }

Multi-Value IS

{ "criteria": [ { "field_name": "tag", "criteria_condition": "is", "value": ["frontend", "backend"] } ], "pattern": "1" }

Date: Between

{ "criteria": [ { "field_name": "start_date", "criteria_condition": "between", "value": ["2024-11-01", "2024-11-30"] } ], "pattern": "1" }

Numeric: Greater Than

{ "criteria": [ { "field_name": "percentage_completion", "criteria_condition": "greater_than", "value": ["50"] } ], "pattern": "1" }

Date Preset: Next 7 Days

{ "criteria": [ { "field_name": "due_date", "criteria_condition": "next_7_days" } ], "pattern": "1" }

Overdue + Assigned to Me

{ "criteria": [ { "field_name": "due_date", "criteria_condition": "overdue" }, { "field_name": "owner", "criteria_condition": "is", "value": ["4000000006061"] } ], "pattern": "1 AND 2" }

User: Subordinates

{ "criteria": [ { "field_name": "assignee", "criteria_condition": "subordinates_of", "value": ["4000000006061"] } ], "pattern": "1" }

Empty Field Check

{ "criteria": [ { "field_name": "description", "criteria_condition": "is_empty" } ], "pattern": "1" }

Unscheduled Date Field

{ "criteria": [ { "field_name": "end_date", "criteria_condition": "unscheduled" } ], "pattern": "1" }
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

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

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 CA: https://accounts.zohocloud.ca
    • For US: https://accounts.zoho.com
    • For AU: https://accounts.zoho.com.au
    • For JP: https://accounts.zoho.jp
    • For UK: https://accounts.zoho.uk
    • For IN: https://accounts.zoho.in
    • For CN: https://accounts.zoho.com.cn
    • For EU: https://accounts.zoho.eu
    • For SA: https://accounts.zoho.sa
  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 "Bearer {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 CA: https://accounts.zohocloud.ca
    • For US: https://accounts.zoho.com
    • For AU: https://accounts.zoho.com.au
    • For JP: https://accounts.zoho.jp
    • For UK: https://accounts.zoho.uk
    • For IN: https://accounts.zoho.in
    • For CN: https://accounts.zoho.com.cn
    • For EU: https://accounts.zoho.eu
    • For SA: https://accounts.zoho.sa
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.
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 portals accessible to the current user. Use this API to list available portals along with their basic details.

GET

/api/v3/portals

OAuth Scope:

ZohoProjects.portals.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portals";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portals');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portals")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portals";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portals"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portals");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portals");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portals");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portals"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portals", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portals HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portals';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portals")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portals"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portals" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portals" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portals"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portals")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200[ { "owner" : { "zpuid" : "6000000002407", "full_name" : "Portal System", "name" : "Portal System", "last_name" : "", "id" : 23163805, "is_client_user" : false, "first_name" : "Portal System", "email" : "admin@zylker.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", "id" : "26828068", "org_logo" : "/images/svg/zps-logo-default.svg", "bug_plan" : "Enterprise", "project_plan" : "Enterprise" } ]
Get Portal Details

Retrieve details of a specific portal including configuration and settings.

GET

/api/v3/portal/[PORTALID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "portal_details" : { "owner" : { "zpuid" : "6000000002407", "full_name" : "Portal System", "name" : "Portal System", "last_name" : "", "id" : 23163805, "is_client_user" : false, "first_name" : "Portal System", "email" : "admin@zylker.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 } }
Databackup

This module covers all operations related to databackup. Use these APIs to schedule, get status, get history and download the databackup.

Schedule Data Backup

Schedule a data backup for the portal. Use this API to generate a downloadable backup file of portal data. If a backup was already generated within the last 24 hours, the existing export details and download URL will be returned.

POST

/api/v3/portal/[PORTALID]/portal_export

OAuth Scope:

ZohoProjects.portals.READ, ZohoFiles.files.READ

Parameter

Param Name
Data Type
Description
access_code

String

Enter a password to secure the downloaded backup file. This code will be required when accessing the exported file.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'access_code = "xxxxxx"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export";
params = Map();
params.put("access_code", "xxxxxx");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export');
url.searchParams.append('access_code', 'xxxxxx');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export")
params = {
  "access_code" => "xxxxxx"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'access_code' => 'xxxxxx',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export"

params = {
    "access_code": "xxxxxx"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_access_code = curl_easy_escape(curl, "xxxxxx", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export?access_code=%s", enc_access_code);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_access_code);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["access_code"] = "xxxxxx";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_access_code = curl_easy_escape(curl, "xxxxxx", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export";
        url += "?access_code=" + std::string(enc_access_code);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_access_code);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-access_code (java.net.URLEncoder/encode "xxxxxx" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export" "?access_code=" enc-access_code)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export", nil)
    q := req.URL.Query()
    q.Add("access_code", "xxxxxx")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export?access_code=xxxxxx HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/portal_export");
uriBuilder.addParameter("access_code", "xxxxxx");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export';

const params = new URLSearchParams({
  'access_code': 'xxxxxx'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
access_code = "xxxxxx"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("access_code", "xxxxxx")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedAccess_code = [@"xxxxxx" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export?access_code=%@", encodedAccess_code];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_access_code = Uri.pct_encode "xxxxxx" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export" ^ "?access_code=" ^ enc_access_code) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    access_code = "xxxxxx"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export"

params <- list(
  access_code = "xxxxxx"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export")!
components.queryItems = [
    URLQueryItem(name: "access_code", value: "xxxxxx")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

access_code : "xxxxxx"

Sample Response

200{ "status_code" : 200, "details" : { "last_export_time" : "2025-12-16 17:13:25.297 Asia/Kolkata", "export_id" : "5000000009001", "message" : "EXPORT_ONCE_IN_24_HOURS", "link_expires_on" : "2025-12-31 17:13:25.298 Asia/Kolkata" }, "status_check_url" : "https://projectsapi.zoho.com/api/v3/portal/46220525/portal_export/5000000009001/status", "download_api_url" : "https://download.zoho.com/download?x-service=projects&event-id=projects-4a477f0197f825a72a74fc5820b48ce54d874f9b84179b23e535f912d36ac3cde97170bde6248eee5a068619afaff833f91e5a53c10ba528ca643ba822b85d2f240d8146cf615da2c409634fdf3550c98f61954c48ca77a60ab63b2f3aa5e805c6d466f2ecc31e56570375c174db6f72028a00df4254f6ac0b6f3097d66f1fd0daa8eb892f08e29246cf83516a5b26b6" }
Get Data Backup Status

Retrieve the status of a portal data backup. Use this API to check whether the backup is in progress or completed. Once completed, the response includes the download URL. Use the export ID returned from the Schedule Data Backup API.

GET

/api/v3/portal/[PORTALID]/portal_export/[PORTAL_EXPORTID]/status

OAuth Scope:

ZohoProjects.portals.READ, ZohoFiles.files.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/portal_export/[PORTAL_EXPORTID]/status");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/[PORTAL_EXPORTID]/status")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "status_code" : 200, "details" : { "message" : "PORTAL_EXPORT_COMPLETED" }, "download_api_url" : "https://download.zoho.com/download?x-service=projects&event-id=projects-a13267af31735eb265430df18a6ab046c7b6dfa36946b04ed42f09b0781e03a47f81aaf2d4edb514c7cab2b8653e6a62d43c1fcf503b460dc9be682a0b763e1816ef1b29644ae66d91365b815e576de7a136892f4335aa9f31f582657e98bd07f7509ad00fa2f45d551dd54b65c6c102e6e1c614d2c5d1205b06e9ddf6fab542" }
Get Data Backup History

Retrieve the history of portal data backups. Use this API to view previously generated backups along with their status and download links.

GET

/api/v3/portal/[PORTALID]/portal_export/history

OAuth Scope:

ZohoProjects.portals.READ, ZohoFiles.files.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/portal_export/history");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/portal_export/history")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "portal_export_history" : [ { "requested_via" : "api", "export_id" : "5000000009001", "filesize" : "-", "scheduled_on" : "2025-12-16T11:43:25.040Z", "download_api_url" : "https://download.zoho.com/download?x-service=projects&event-id=projects-a13267af31735eb265430df18a6ab046c7b6dfa36946b04ed42f09b0781e03a47f81aaf2d4edb514c7cab2b8653e6a62d43c1fcf503b460dc9be682a0b763e1816ef1b29644ae66d91365b815e576de7a136892f4335aa9f31f582657e98bd07f7509ad00fa2f45d551dd54b65c6c102e6e1c614d2c5d1205b06e9ddf6fab542", "status" : "completed", "link_expires_on" : "2025-12-31T11:43:25.040Z" } ] }
Trash

This module covers all operations related to trash management. Use these APIs to retrieve, move, restore, and permanently delete records from the trash.

Get Trashed Records

Retrieve records that have been moved to the recycle bin. Use this API to view deleted items that can be restored or permanently removed.

GET

/api/v3/portal/[PORTALID]/bin

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 be displayed per page.

sort_by

String

Enter the sort criteria. Accepted values: trashed_time or name

filter

String

Enter the filter criteria.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/bin?page=1&per_page=10&sort_by=asc%28trashed_time%29&filter=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%227000000007003%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22manufacturing%22%5D%7D%5D%2C%22pattern%22%3A%221%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "asc(trashed_time)");
params.put("filter", {"criteria":[{"cfid":"7000000007003","criteria_condition":"contains","value":["manufacturing"]}],"pattern":"1"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/bin');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'asc(trashed_time)');
url.searchParams.append('filter', '{"criteria":[{"cfid":"7000000007003","criteria_condition":"contains","value":["manufacturing"]}],"pattern":"1"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/bin")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "asc(trashed_time)",
  "filter" => "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'asc(trashed_time)',
    'filter' => '{"criteria":[{"cfid":"7000000007003","criteria_condition":"contains","value":["manufacturing"]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "asc(trashed_time)",
    "filter": "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "asc(trashed_time)", 0);
        char *enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/bin?page=%s&per_page=%s&sort_by=%s&filter=%s", enc_page, enc_per_page, enc_sort_by, enc_filter);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_filter);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "asc(trashed_time)";
query["filter"] = "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/bin") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "asc(trashed_time)", 0);
        char* enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&filter=" + std::string(enc_filter);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_filter);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "asc(trashed_time)" "UTF-8")
      enc-filter (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/bin" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&filter=" enc-filter)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/bin", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "asc(trashed_time)")
    q.Add("filter", "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/bin?page=1&per_page=10&sort_by=asc%28trashed_time%29&filter=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%227000000007003%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22manufacturing%22%5D%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/bin");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "asc(trashed_time)");
uriBuilder.addParameter("filter", "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/bin';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'asc(trashed_time)',
  'filter': '{"criteria":[{"cfid":"7000000007003","criteria_condition":"contains","value":["manufacturing"]}],"pattern":"1"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "asc(trashed_time)"
filter = {"criteria":[{"cfid":"7000000007003","criteria_condition":"contains","value":["manufacturing"]}],"pattern":"1"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "asc(trashed_time)")
    urlBuilder.addQueryParameter("filter", "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"asc(trashed_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFilter = [@"{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/bin?page=%@&per_page=%@&sort_by=%@&filter=%@", encodedPage, encodedPer_page, encodedSort_by, encodedFilter];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "asc(trashed_time)" in
  let enc_filter = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/bin" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&filter=" ^ enc_filter) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "asc(trashed_time)"
    filter = "{`"criteria`":[{`"cfid`":`"7000000007003`",`"criteria_condition`":`"contains`",`"value`":[`"manufacturing`"]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/bin"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "asc(trashed_time)",
  filter = "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/bin")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "asc(trashed_time)"),
    URLQueryItem(name: "filter", value: "{\"criteria\":[{\"cfid\":\"7000000007003\",\"criteria_condition\":\"contains\",\"value\":[\"manufacturing\"]}],\"pattern\":\"1\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "asc(trashed_time)" filter : {"criteria":[{"cfid":"7000000007003","criteria_condition":"contains","value":["manufacturing"]}],"pattern":"1"}

Sample Response

200{ "page_info" : { "per_page" : 50, "has_next_page" : false, "count" : 2, "page" : 1 }, "trash" : [ { "module" : { "name" : "tasks", "id" : 7000000000146 }, "name" : "Proposal to customer", "trashed_time" : "2025-04-04T12:25:45.185+01:00", "project" : { "name" : "Automobile Spare Manufacturing", "id" : 7000000016276 }, "trashed_by" : { "zpuid" : "7000000002515", "full_name" : "Carter Hayes", "name" : "Carter", "last_name" : "Hayes", "first_name" : "Carter", "email" : "carter.hayes@zylker.com", "zuid" : 32877310 }, "id" : 7000000016593 } ] }
Move Records to Trash

Move records to the recycle bin. Use this API to temporarily remove records while retaining the ability to restore them.

POST

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

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the record
name. Accepted values: projects,phases,tasklists,tasks,issues

items

JSONArray

array size : 0-100

Enter the list of record IDs

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/trash' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"tasks","items":["4000000000987","4000000012001"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/trash";
params = Map();
params.put("module", "tasks");
params.put("items", ["4000000000987","4000000012001"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/trash');

const payload = JSON.stringify({"module":"tasks","items":["4000000000987","4000000012001"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/trash")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"tasks","items":["4000000000987","4000000012001"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/trash";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"module":"tasks","items":["4000000000987","4000000012001"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/trash"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"tasks","items":["4000000000987","4000000012001"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/trash");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/trash");
request.Content = new StringContent(
    @"{""module"":""tasks"",""items"":[""4000000000987"",""4000000012001""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/trash");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/trash"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/trash", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/trash HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"tasks","items":["4000000000987","4000000012001"]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/trash");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/trash';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"tasks","items":["4000000000987","4000000012001"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"tasks","items":["4000000000987","4000000012001"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/trash")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"tasks","items":["4000000000987","4000000012001"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/trash"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/trash" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"tasks","items":["4000000000987","4000000012001"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"tasks","items":["4000000000987","4000000012001"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/trash" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/trash"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/trash")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"tasks","items":["4000000000987","4000000012001"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "tasks", "items" : [ "4000000000987", "4000000012001" ] }

Sample Response

204 No Content
Delete Records

Remove records from the recycle bin permanently. Use this API to remove records completely.

DELETE

/api/v3/portal/[PORTALID]/bin

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the record
name. Accepted values: projects,phases,tasklists,tasks,issues

items

JSONArray

array size : 0-100

Enter the list of record IDs

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/bin' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '[{"module":"tasks","items":["4000000000987","4000000012001"]}]'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin";
params = List();
params.add({"module":"tasks","items":["4000000000987","4000000012001"]});
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/bin');

const payload = JSON.stringify([{"module":"tasks","items":["4000000000987","4000000012001"]}]);

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/bin")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '[{"module":"tasks","items":["4000000000987","4000000012001"]}]'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => '[{"module":"tasks","items":["4000000000987","4000000012001"]}]',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '[{"module":"tasks","items":["4000000000987","4000000012001"]}]'

response = requests.delete(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/bin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/bin");
request.Content = new StringContent(
    @"[{""module"":""tasks"",""items"":[""4000000000987"",""4000000012001""]}]",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/bin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/bin"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]")
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/bin", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/bin HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

[{"module":"tasks","items":["4000000000987","4000000012001"]}]
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/bin");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/bin';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([{"module":"tasks","items":["4000000000987","4000000012001"]}])
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
[{"module":"tasks","items":["4000000000987","4000000012001"]}]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/bin")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""[{"module":"tasks","items":["4000000000987","4000000012001"]}]""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/bin"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/bin" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|[{"module":"tasks","items":["4000000000987","4000000012001"]}]|json} in
  Lwt_main.run (
    Client.delete ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
[{"module":"tasks","items":["4000000000987","4000000012001"]}]
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/bin" -Method DELETE -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/bin"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/bin")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
[{"module":"tasks","items":["4000000000987","4000000012001"]}]
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
[ { "module" : "tasks", "items" : [ "4000000000987", "4000000012001" ] } ]

Sample Response

204 No Content
Restore Records from Trash

Restore records from the recycle bin. Use this API to recover deleted records within the retention period of 60 days.

POST

/api/v3/portal/[PORTALID]/bin/restore

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the record
name. Accepted values: projects,phases,tasklists,tasks,issues

items

JSONArray

array size : 0-100

Enter the list of record IDs

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '[{"module":"tasks","items":["4000000000987","4000000012001"]}]'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore";
params = List();
params.add({"module":"tasks","items":["4000000000987","4000000012001"]});
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore');

const payload = JSON.stringify([{"module":"tasks","items":["4000000000987","4000000012001"]}]);

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '[{"module":"tasks","items":["4000000000987","4000000012001"]}]'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '[{"module":"tasks","items":["4000000000987","4000000012001"]}]',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '[{"module":"tasks","items":["4000000000987","4000000012001"]}]'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore");
request.Content = new StringContent(
    @"[{""module"":""tasks"",""items"":[""4000000000987"",""4000000012001""]}]",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

[{"module":"tasks","items":["4000000000987","4000000012001"]}]
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

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

URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([{"module":"tasks","items":["4000000000987","4000000012001"]}])
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
[{"module":"tasks","items":["4000000000987","4000000012001"]}]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""[{"module":"tasks","items":["4000000000987","4000000012001"]}]""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|[{"module":"tasks","items":["4000000000987","4000000012001"]}]|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
[{"module":"tasks","items":["4000000000987","4000000012001"]}]
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "[{\"module\":\"tasks\",\"items\":[\"4000000000987\",\"4000000012001\"]}]"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/bin/restore")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
[{"module":"tasks","items":["4000000000987","4000000012001"]}]
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
[ { "module" : "tasks", "items" : [ "4000000000987", "4000000012001" ] } ]

Sample Response

204 No Content
Empty Recyle Bin

Delete all records from the recycle bin permanently. Use this API to clear all trashed data. This action cannot be reversed.

DELETE

/api/v3/portal/[PORTALID]/empty-bin

OAuth Scope:

ZohoProjects.portals.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/empty-bin");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/empty-bin")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

202{ "i18n_key" : "zp.emptybin.scheduled", "message" : "The trashed records are being deleted as part of the default cleanup process. The Recycle bin will start emptying after this process is completed." }
Custom Domain

This module covers operations related to custom domain configuration in Zoho Projects. Use this API to validate, retrieve, add, update status, and delete custom domain mapping for the portal.

Validate Custom Domain

Validate whether the specified domain can be used as a custom domain.

GET

/api/v3/portal/[PORTALID]/custom-domain/validate

OAuth Scope:

ZohoProjects.portals.CREATE

Query Parameter

Param Name
Data Type
Description
domain

String

required

Enter the custom domain name to validate.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate?domain=projects.zylker.com' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate";
params = Map();
params.put("domain", "projects.zylker.com");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate');
url.searchParams.append('domain', 'projects.zylker.com');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate")
params = {
  "domain" => "projects.zylker.com"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'domain' => 'projects.zylker.com',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate"

params = {
    "domain": "projects.zylker.com"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_domain = curl_easy_escape(curl, "projects.zylker.com", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate?domain=%s", enc_domain);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_domain);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["domain"] = "projects.zylker.com";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_domain = curl_easy_escape(curl, "projects.zylker.com", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate";
        url += "?domain=" + std::string(enc_domain);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_domain);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-domain (java.net.URLEncoder/encode "projects.zylker.com" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate" "?domain=" enc-domain)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate", nil)
    q := req.URL.Query()
    q.Add("domain", "projects.zylker.com")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate?domain=projects.zylker.com HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/custom-domain/validate");
uriBuilder.addParameter("domain", "projects.zylker.com");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate';

const params = new URLSearchParams({
  'domain': 'projects.zylker.com'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
domain = "projects.zylker.com"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("domain", "projects.zylker.com")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedDomain = [@"projects.zylker.com" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate?domain=%@", encodedDomain];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_domain = Uri.pct_encode "projects.zylker.com" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate" ^ "?domain=" ^ enc_domain) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    domain = "projects.zylker.com"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate"

params <- list(
  domain = "projects.zylker.com"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/validate")!
components.queryItems = [
    URLQueryItem(name: "domain", value: "projects.zylker.com")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

domain : "projects.zylker.com"

Sample Response

200{ "has_ssl_certificate" : false, "status" : "domain verified successfully" }
Get Custom Domain

Retrieve the details of the custom domain.

GET

/api/v3/portal/[PORTALID]/custom-domain

OAuth Scope:

ZohoProjects.portals.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/custom-domain");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "status" : "enabled", "domain" : "projects.zylker.com" }
Add Custom Domain

Add the custom domain configuration to the Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/custom-domain

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
domain

String

required

Enter the custom domain name. The domain record is stored and the SSL certificate availability is checked. If SSL is not available, an SSL certificate is purchased automatically. SSL certificate provisioning may take up to 7 days.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'domain = "projects.zylker.com"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain";
params = Map();
params.put("domain", "projects.zylker.com");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain');
url.searchParams.append('domain', 'projects.zylker.com');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")
params = {
  "domain" => "projects.zylker.com"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'domain' => 'projects.zylker.com',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"

params = {
    "domain": "projects.zylker.com"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_domain = curl_easy_escape(curl, "projects.zylker.com", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain?domain=%s", enc_domain);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_domain);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["domain"] = "projects.zylker.com";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_domain = curl_easy_escape(curl, "projects.zylker.com", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain";
        url += "?domain=" + std::string(enc_domain);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_domain);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-domain (java.net.URLEncoder/encode "projects.zylker.com" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" "?domain=" enc-domain)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain", nil)
    q := req.URL.Query()
    q.Add("domain", "projects.zylker.com")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain?domain=projects.zylker.com HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/custom-domain");
uriBuilder.addParameter("domain", "projects.zylker.com");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain';

const params = new URLSearchParams({
  'domain': 'projects.zylker.com'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
domain = "projects.zylker.com"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("domain", "projects.zylker.com")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedDomain = [@"projects.zylker.com" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain?domain=%@", encodedDomain];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_domain = Uri.pct_encode "projects.zylker.com" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" ^ "?domain=" ^ enc_domain) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    domain = "projects.zylker.com"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"

params <- list(
  domain = "projects.zylker.com"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")!
components.queryItems = [
    URLQueryItem(name: "domain", value: "projects.zylker.com")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

domain : "projects.zylker.com"

Sample Response

200{ "has_ssl_certificate" : false, "status" : "domain added successfully" }
Update Custom Domain Status

Update the custom domain status. Enable the domain after SSL verification or disable the active domain mapping. When disabled, the portal will be accessible using the default Zoho Projects domain.

PUT

/api/v3/portal/[PORTALID]/custom-domain/status

OAuth Scope:

ZohoProjects.portals.UPDATE

Parameter

Param Name
Data Type
Description
is_enabled

boolean

required

-

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PUT \
'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"is_enabled":true}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status";
params = Map();
params.put("is_enabled", true);
response = invokeUrl
[
    url: url
    type: PUT
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status');

const payload = JSON.stringify({"is_enabled":true});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"is_enabled":true}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => '{"is_enabled":true}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"is_enabled":true}'

response = requests.put(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"is_enabled\":true}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status");
request.Content = new StringContent(
    @"{""is_enabled"":true}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"is_enabled\":true}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"is_enabled\":true}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"is_enabled\":true}")
    req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PUT https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"is_enabled":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/custom-domain/status");
HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"is_enabled\":true}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status';

const options = {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"is_enabled":true})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"is_enabled":true}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PUT"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"is_enabled":true}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"is_enabled\":true}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"is_enabled":true}|json} in
  Lwt_main.run (
    Client.put ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"is_enabled":true}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status" -Method PUT -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status"

response <- PUT(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"is_enabled\":true}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain/status")!
var request = URLRequest(url: url)
request.httpMethod = "PUT"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"is_enabled":true}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "is_enabled" : true }

Sample Response

204 No Content
Delete Custom Domain

Remove the custom domain configuration from the Zoho Projects portal. The portal will use the default Zoho Projects domain once removed.

DELETE

/api/v3/portal/[PORTALID]/custom-domain

OAuth Scope:

ZohoProjects.portals.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/custom-domain");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/custom-domain")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Retrieve the list of fields available in a module along with their metadata such as API name, display name, and field type. Use this API to understand the structure of a module before creating or updating records. Retrieve module_id using Get Modules API

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/fields

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/fields")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Modules

Retrieve a list of modules available in the portal along with their configuration details. Use this API to identify module API names, IDs, and types before performing module-level operations.

GET

/api/v3/portal/[PORTALID]/settings/modules

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description

JSONObject

Enter filter criteria to refine results. Use this to combine multiple filter conditions.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules?%22filter%22=%7B%22is_customized%22%3Atrue%2C%22is_default%22%3Atrue%2C%22is_web_tab%22%3Atrue%7D&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules";
params = Map();
params.put("filter", {"is_customized":true,"is_default":true,"is_web_tab":true});
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules');
url.searchParams.append('"filter"', '{"is_customized":true,"is_default":true,"is_web_tab":true}');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules")
params = {
  ""filter"" => "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    '"filter"' => '{"is_customized":true,"is_default":true,"is_web_tab":true}',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules"

params = {
    ""filter"": "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_"filter" = curl_easy_escape(curl, "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules?\"filter\"=%s&page=%s&per_page=%s", enc_"filter", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query[""filter""] = "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_"filter" = curl_easy_escape(curl, "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules";
        url += "?"filter"=" + std::string(enc_"filter");
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"filter" (java.net.URLEncoder/encode "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules" "?"filter"=" enc-"filter" "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules", nil)
    q := req.URL.Query()
    q.Add(""filter"", "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules?%22filter%22=%7B%22is_customized%22%3Atrue%2C%22is_default%22%3Atrue%2C%22is_web_tab%22%3Atrue%7D&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter(""filter"", "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules';

const params = new URLSearchParams({
  '"filter"': '{"is_customized":true,"is_default":true,"is_web_tab":true}',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
"filter" = {"is_customized":true,"is_default":true,"is_web_tab":true}
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""filter"", "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encoded"filter" = [@"{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules?"filter"=%@&page=%@&per_page=%@", encoded"filter", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_"filter" = Uri.pct_encode "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules" ^ "?"filter"=" ^ enc_"filter" ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    "filter" = "{`"is_customized`":true,`"is_default`":true,`"is_web_tab`":true}"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules"

params <- list(
  "filter" = "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules")!
components.queryItems = [
    URLQueryItem(name: ""filter"", value: "{\"is_customized\":true,\"is_default\":true,\"is_web_tab\":true}"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

"filter" : { "is_customized" : true, "is_default" : true, "is_web_tab" : true } page : "1" per_page : "10"

Sample Response

200[ { "id" : "7000000000140", "api_name" : "tasks", "singular_name" : "Task", "plural_name" : "Tasks", "icon_class" : "zoho-task", "type" : "default", "status" : "active", "is_global_module" : true, "is_all_projects" : true, "is_all_profiles" : true, "overviewNeeded" : true, "tabName" : "Task", "is_overview_needed" : true, "module_property" : { "search_module_id" : "5", "is_indexed_module" : true, "default_layout_type" : "public" } }, { "id" : "7000000309463", "api_name" : "risk", "singular_name" : "Risk", "plural_name" : "Risks", "icon_class" : "zoho-cm-action-1", "type" : "custom_module", "status" : "active", "is_global_module" : true, "is_all_projects" : false, "is_all_profiles" : true, "overviewNeeded" : true, "tabName" : "risk", "is_overview_needed" : true, "module_property" : { "search_module_id" : "103", "is_indexed_module" : true, "default_layout_type" : "public" } } ]
Get Module

Retrieve the details of a specific module using its API name. Retrieve module_api_name using Get Modules API. Use this API to view module configuration such as type, visibility, and layout settings.

GET

/api/v3/portal/[PORTALID]/settings/modules/[MODULEID]

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/[MODULEID]");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "id" : "7000000161001", "api_name" : "section", "singular_name" : "section", "plural_name" : "section", "icon_class" : "zoho-deliverable", "type" : "custom_module", "status" : "active", "is_global_module" : true, "is_all_projects" : true, "is_all_profiles" : true, "tabName" : "section", "overviewNeeded" : true, "is_overview_needed" : true, "module_property" : { "search_module_id" : "101", "is_indexed_module" : true, "default_layout_type" : "public", "tab_id" : "7000000161003" } }
Create Module

Create a new custom module in the Zoho Projects portal. Use this API to define a module with its name, icon, and visibility across projects.

POST

/api/v3/portal/[PORTALID]/settings/modules

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Parameter

Param Name
Data Type
Description
singular_name

String

max length : 50

Enter the singular display name of the custom module.

plural_name

String

max length : 50

Enter the plural display name of the custom module.

icon_class

String

max length : 50

Enter the icon class of the custom module.

is_global_module

boolean

Specify whether the custom module is global or project-specific.
Accepted values :true or false

is_all_projects

boolean

Specify whether this project module to be shown in the all projects or not

is_overview_needed

boolean

Specify whether this project module to be shown in the overview or not

JSONArray

max length : 10000
array size : 0-100

Enter the project association details.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules";
params = Map();
params.put("singular_name", "Risk");
params.put("plural_name", "Risks");
params.put("icon_class", "zoho-risk");
params.put("is_global_module", "false");
params.put("is_all_projects", "false");
params.put("is_overview_needed", "true");
params.put("projects", [{"project":{"id":"4000000062001"},"is_selected":"true"}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules');

const payload = JSON.stringify({"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_global_module\":\"false\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"projects\":[{\"project\":{\"id\":\"4000000062001\"},\"is_selected\":\"true\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules");
request.Content = new StringContent(
    @"{""singular_name"":""Risk"",""plural_name"":""Risks"",""icon_class"":""zoho-risk"",""is_global_module"":""false"",""is_all_projects"":""false"",""is_overview_needed"":""true"",""projects"":[{""project"":{""id"":""4000000062001""},""is_selected"":""true""}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_global_module\":\"false\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"projects\":[{\"project\":{\"id\":\"4000000062001\"},\"is_selected\":\"true\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_global_module\":\"false\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"projects\":[{\"project\":{\"id\":\"4000000062001\"},\"is_selected\":\"true\"}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_global_module\":\"false\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"projects\":[{\"project\":{\"id\":\"4000000062001\"},\"is_selected\":\"true\"}]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"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/settings/modules");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_global_module\":\"false\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"projects\":[{\"project\":{\"id\":\"4000000062001\"},\"is_selected\":\"true\"}]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_global_module\":\"false\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"projects\":[{\"project\":{\"id\":\"4000000062001\"},\"is_selected\":\"true\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_global_module\":\"false\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"projects\":[{\"project\":{\"id\":\"4000000062001\"},\"is_selected\":\"true\"}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_global_module":"false","is_all_projects":"false","is_overview_needed":"true","projects":[{"project":{"id":"4000000062001"},"is_selected":"true"}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "singular_name" : "Risk", "plural_name" : "Risks", "icon_class" : "zoho-risk", "is_global_module" : "false", "is_all_projects" : "false", "is_overview_needed" : "true", "projects" : [ { "project" : { "id" : "4000000062001" }, "is_selected" : "true" } ] }

Sample Response

200{ "id" : "7000000116003", "api_name" : "risk", "singular_name" : "Risk", "plural_name" : "Risks", "icon_class" : "zoho-deliverable", "type" : "custom_module", "status" : "active", "is_global_module" : true, "is_all_projects" : true, "is_all_profiles" : true, "tabName" : "risk", "module_property" : { "search_module_id" : "100", "is_indexed_module" : true, "default_layout_type" : "public" } }
Update Module

Modify the configuration of an existing module. Use this API to modify module name, visibility, or layout settings.

PATCH

/api/v3/portal/[PORTALID]/settings/modules/[MODULEID]

OAuth Scope:

ZohoProjects.custom_fields.UPDATE

Parameter

Param Name
Data Type
Description
singular_name

String

max length : 50

Enter the singular display name of the custom module.

plural_name

String

max length : 50

Enter the plural display name of the custom module.

icon_class

String

max length : 50

Enter the icon class of the custom module.

is_all_projects

boolean

Specify whether this project module to be shown in the all projects.
Accepted values :true or false

is_overview_needed

boolean

Specify whether this project module to be shown in the overview.
Accepted values :true or false

module_property

JSONObject

max length : 1000

Enter the custom module property which is to be allowed to be update.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]";
params = Map();
params.put("singular_name", "Risk");
params.put("plural_name", "Risks");
params.put("icon_class", "zoho-risk");
params.put("is_all_projects", "false");
params.put("is_overview_needed", "true");
params.put("module_property", {"default_layout_type":"public|private"});
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]');

const payload = JSON.stringify({"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"module_property\":{\"default_layout_type\":\"public|private\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");
request.Content = new StringContent(
    @"{""singular_name"":""Risk"",""plural_name"":""Risks"",""icon_class"":""zoho-risk"",""is_all_projects"":""false"",""is_overview_needed"":""true"",""module_property"":{""default_layout_type"":""public|private""}}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"module_property\":{\"default_layout_type\":\"public|private\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"module_property\":{\"default_layout_type\":\"public|private\"}}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"module_property\":{\"default_layout_type\":\"public|private\"}}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/[MODULEID]");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"module_property\":{\"default_layout_type\":\"public|private\"}}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"module_property\":{\"default_layout_type\":\"public|private\"}}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"singular_name\":\"Risk\",\"plural_name\":\"Risks\",\"icon_class\":\"zoho-risk\",\"is_all_projects\":\"false\",\"is_overview_needed\":\"true\",\"module_property\":{\"default_layout_type\":\"public|private\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"singular_name":"Risk","plural_name":"Risks","icon_class":"zoho-risk","is_all_projects":"false","is_overview_needed":"true","module_property":{"default_layout_type":"public|private"}}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "singular_name" : "Risk", "plural_name" : "Risks", "icon_class" : "zoho-risk", "is_all_projects" : "false", "is_overview_needed" : "true", "module_property" : { "default_layout_type" : "public|private" } }

Sample Response

200{ "id" : "7000000116003", "api_name" : "risk", "singular_name" : "Risk", "plural_name" : "Risks", "icon_class" : "zoho-deliverable", "type" : "custom_module", "status" : "active", "is_global_module" : true, "is_all_projects" : true, "is_all_profiles" : true, "tabName" : "risk", "module_property" : { "search_module_id" : "100", "is_indexed_module" : true, "default_layout_type" : "public" } }
Update Status

Activate or deactivate a module.

PATCH

/api/v3/portal/[PORTALID]/settings/modules/[MODULEID]/(activate|deactivate)

OAuth Scope:

ZohoProjects.custom_fields.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)";
response = invokeUrl
[
    url: url
    type: PATCH
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.patch(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate) HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/[MODULEID]/(activate|deactivate)");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.patch ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)" -Method PATCH -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]/(activate|deactivate)")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Trash Module

Move a module to the recycle bin.

DELETE

/api/v3/portal/[PORTALID]/settings/modules/[MODULEID]

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/[MODULEID]");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/[MODULEID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Delete Module

Remove a module from the recycle bin permanently.

DELETE

/api/v3/portal/[PORTALID]/settings/modules/bin/[BINID]

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/bin/[BINID]");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Restore Module

Restore a module from the recycle bin.

POST

/api/v3/portal/[PORTALID]/settings/modules/bin/[BINID]/recover

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/bin/[BINID]/recover");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/modules/bin/[BINID]/recover")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200[ { "id" : "4000000000177", "api_name" : "test", "singular_name" : "test", "plural_name" : "tests", "icon_class" : "zoho-cm-action-1", "type" : "custom_module", "status" : "active", "is_global_module" : true, "is_all_projects" : false, "is_all_profiles" : true, "tabName" : "test", "is_overview_needed" : true, "module_property" : { "search_module_id" : "128", "is_indexed_module" : true, "default_layout_type" : "public", "tab_id" : "4000000000180" } } ]
Get Field Configuration

Retrieve field configuration details for a module, including supported field types and field limits.

GET

/api/v3/portal/[PORTALID]/settings/fields-configuration

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration?module=Risk' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration";
params = Map();
params.put("module", "Risk");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration');
url.searchParams.append('module', 'Risk');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration")
params = {
  "module" => "Risk"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration"

params = {
    "module": "Risk"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration?module=%s", enc_module);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration";
        url += "?module=" + std::string(enc_module);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration" "?module=" enc-module)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration?module=Risk HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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-configuration");
uriBuilder.addParameter("module", "Risk");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration';

const params = new URLSearchParams({
  'module': 'Risk'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration?module=%@", encodedModule];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration" ^ "?module=" ^ enc_module) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration"

params <- list(
  module = "Risk"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields-configuration")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk"

Sample Response

200{ "supported_field_types" : [ "singleline", "multiline", "email", "url", "phone", "picklist", "userpicklist", "multipicklist", "multiuserpicklist", "Date", "checkbox", "currency", "Double", "Numeric", "percentage", "integration_field", "formula", "boolean" ], "datatype_limitations" : [ { "data_type" : "CHAR", "allowed_fields" : "50", "used_fields" : "49", "shared_field_types" : [ { "field_type" : "email", "allowed_fields" : "50", "used_fields" : "5" }, { "field_type" : "singleline", "allowed_fields" : "50", "used_fields" : "27" }, { "field_type" : "url", "allowed_fields" : "50", "used_fields" : "5" }, { "field_type" : "phone", "allowed_fields" : "50", "used_fields" : "5" }, { "field_type" : "picklist", "allowed_fields" : "50", "used_fields" : "7" } ] }, { "data_type" : "DATE", "allowed_fields" : "20", "used_fields" : "5", "shared_field_types" : [ { "field_type" : "Date", "allowed_fields" : "20", "used_fields" : "5" } ] }, { "data_type" : "DOUBLE", "allowed_fields" : "35", "used_fields" : "10", "shared_field_types" : [ { "field_type" : "percentage", "allowed_fields" : "35", "used_fields" : "5" }, { "field_type" : "Double", "allowed_fields" : "35", "used_fields" : "5" } ] }, { "data_type" : "USER", "allowed_fields" : "5", "used_fields" : "4", "shared_field_types" : [ { "field_type" : "userpicklist", "allowed_fields" : "5", "used_fields" : "4" } ] }, { "data_type" : "UNKNOWN", "allowed_fields" : "-1", "used_fields" : "0", "shared_field_types" : [ { "field_type" : "formula", "allowed_fields" : "15", "used_fields" : "0" } ] }, { "data_type" : "TEXT", "allowed_fields" : "15", "used_fields" : "15", "shared_field_types" : [ { "field_type" : "multiline", "allowed_fields" : "15", "used_fields" : "15" }, { "field_type" : "integration_field", "allowed_fields" : "5", "used_fields" : "0" } ] }, { "data_type" : "LONG", "allowed_fields" : "15", "used_fields" : "6", "shared_field_types" : [ { "field_type" : "Numeric", "allowed_fields" : "15", "used_fields" : "6" } ] }, { "data_type" : "MULTIUSER", "allowed_fields" : "5", "used_fields" : "4", "shared_field_types" : [ { "field_type" : "multiuserpicklist", "allowed_fields" : "5", "used_fields" : "4" } ] }, { "data_type" : "BOOLEAN", "allowed_fields" : "20", "used_fields" : "5", "shared_field_types" : [ { "field_type" : "boolean", "allowed_fields" : "20", "used_fields" : "0" }, { "field_type" : "checkbox", "allowed_fields" : "20", "used_fields" : "5" } ] }, { "data_type" : "MULTI", "allowed_fields" : "10", "used_fields" : "10", "shared_field_types" : [ { "field_type" : "multipicklist", "allowed_fields" : "10", "used_fields" : "10" } ] } ] }
Module Layouts

This module covers operations related to the management of module layouts in Zoho Projects. Use this API to retrieve layout lists, update layouts, and associate or disassociate fields from layouts.

Get Layouts

Retrieve the list of layouts available in a module. Use this API to identify layout IDs before performing layout-level operations such as updating layouts, adding fields, or managing sections.

GET

/api/v3/portal/[PORTALID]/settings/layouts

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter filter criteria to refine results. Use this to combine multiple filter conditions.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts?module=Risk&page=1&per_page=10&%22filter%22=%7B%22is_association_info_needed%22%3A%22true%22%2C%22is_current_user_profile_associated%22%3A%22true%22%2C%22search_term%22%3A%22Zoho+Projects%22%2C%22search_by%22%3A%22project%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts";
params = Map();
params.put("module", "Risk");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"is_association_info_needed":"true","is_current_user_profile_associated":"true","search_term":"Zoho Projects","search_by":"project"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts');
url.searchParams.append('module', 'Risk');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"is_association_info_needed":"true","is_current_user_profile_associated":"true","search_term":"Zoho Projects","search_by":"project"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts")
params = {
  "module" => "Risk",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"is_association_info_needed":"true","is_current_user_profile_associated":"true","search_term":"Zoho Projects","search_by":"project"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts"

params = {
    "module": "Risk",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts?module=%s&page=%s&per_page=%s&\"filter\"=%s", enc_module, enc_page, enc_per_page, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts";
        url += "?module=" + std::string(enc_module);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts" "?module=" enc-module "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts?module=Risk&page=1&per_page=10&%22filter%22=%7B%22is_association_info_needed%22%3A%22true%22%2C%22is_current_user_profile_associated%22%3A%22true%22%2C%22search_term%22%3A%22Zoho+Projects%22%2C%22search_by%22%3A%22project%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts");
uriBuilder.addParameter("module", "Risk");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts';

const params = new URLSearchParams({
  'module': 'Risk',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"is_association_info_needed":"true","is_current_user_profile_associated":"true","search_term":"Zoho Projects","search_by":"project"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
page = "1"
per_page = "10"
"filter" = {"is_association_info_needed":"true","is_current_user_profile_associated":"true","search_term":"Zoho Projects","search_by":"project"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts?module=%@&page=%@&per_page=%@&"filter"=%@", encodedModule, encodedPage, encodedPer_page, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts" ^ "?module=" ^ enc_module ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
    page = "1"
    per_page = "10"
    "filter" = "{`"is_association_info_needed`":`"true`",`"is_current_user_profile_associated`":`"true`",`"search_term`":`"Zoho Projects`",`"search_by`":`"project`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts"

params <- list(
  module = "Risk",
  page = "1",
  per_page = "10",
  "filter" = "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"is_association_info_needed\":\"true\",\"is_current_user_profile_associated\":\"true\",\"search_term\":\"Zoho Projects\",\"search_by\":\"project\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk" page : "1" per_page : "10" "filter" : { "is_association_info_needed" : "true", "is_current_user_profile_associated" : "true", "search_term" : "Zoho Projects", "search_by" : "project" }

Sample Response

200[ { "associated_entities_count" : 2, "associated_entities" : [ { "name" : "Admin", "id" : 9000000002510 }, { "name" : "Manager", "id" : 9000000002513 } ], "name" : "New Layout 1", "id" : "9000000071079", "is_default" : false, "type" : "PUBLIC" }, { "associated_entities_count" : 2, "associated_entities" : [ { "name" : "Admin", "id" : 9000000002510 }, { "name" : "Manager", "id" : 9000000002513 } ], "name" : "New Layout 2", "id" : "9000000054069", "is_default" : false, "type" : "PUBLIC" } ]

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

Get Default Layout

Retrieve the default layout configured for a module. Use this API to identify the layout applied when new records are created.

GET

/api/v3/portal/[PORTALID]/settings/layouts/default-layout

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout?module=Risk' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout";
params = Map();
params.put("module", "Risk");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout');
url.searchParams.append('module', 'Risk');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout")
params = {
  "module" => "Risk"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout"

params = {
    "module": "Risk"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout?module=%s", enc_module);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout";
        url += "?module=" + std::string(enc_module);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout" "?module=" enc-module)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout?module=Risk HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts/default-layout");
uriBuilder.addParameter("module", "Risk");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout';

const params = new URLSearchParams({
  'module': 'Risk'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout?module=%@", encodedModule];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout" ^ "?module=" ^ enc_module) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout"

params <- list(
  module = "Risk"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/default-layout")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk"

Sample Response

200{ "id" : "7000000161011", "name" : "Standard Layout", "is_default" : true, "type" : "public" }
Get Layout Details

Retrieve the complete details of a layout including sections and associated fields. Use this API to understand layout structure before modifying it.

GET

/api/v3/portal/[PORTALID]/settings/layouts/[LAYOUTID]

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=Risk' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]";
params = Map();
params.put("module", "Risk");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]');
url.searchParams.append('module', 'Risk');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]")
params = {
  "module" => "Risk"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"

params = {
    "module": "Risk"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=%s", enc_module);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]";
        url += "?module=" + std::string(enc_module);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" "?module=" enc-module)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=Risk HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts/[LAYOUTID]");
uriBuilder.addParameter("module", "Risk");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]';

const params = new URLSearchParams({
  'module': 'Risk'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=%@", encodedModule];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" ^ "?module=" ^ enc_module) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"

params <- list(
  module = "Risk"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk"

Sample Response

200{ "layout_information" : { "name" : "New Layout 1", "id" : "9000000075251", "is_default" : "false", "type" : "PUBLIC" }, "sections" : [ { "is_rename_enabled" : true, "is_removable" : true, "is_reorder_enabled" : true, "name" : "New Section 1", "is_field_association_enabled" : true, "id" : "9000000075253", "is_default" : false } ] }

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

Create Layout

Create a new layout in a module. Use this API to define a new layout or clone an existing layout structure.

POST

/api/v3/portal/[PORTALID]/settings/layouts

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Parameter

Param Name
Data Type
Description
module

String

required
max length : 100

Enter the module API name or ID.

name

String

required
max length : 200

Enter the layout name.

type

String

Enter the layout type.

reference

JSONObject

max length : 1000

Specify the layout to be cloned.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts";
params = Map();
params.put("module", "Risk");
params.put("name", "Simple Entity");
params.put("type", "public|private");
params.put("reference", {"id":"4000000062001"});
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts');

const payload = JSON.stringify({"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"name\":\"Simple Entity\",\"type\":\"public|private\",\"reference\":{\"id\":\"4000000062001\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts");
request.Content = new StringContent(
    @"{""module"":""Risk"",""name"":""Simple Entity"",""type"":""public|private"",""reference"":{""id"":""4000000062001""}}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"name\":\"Simple Entity\",\"type\":\"public|private\",\"reference\":{\"id\":\"4000000062001\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"Risk\",\"name\":\"Simple Entity\",\"type\":\"public|private\",\"reference\":{\"id\":\"4000000062001\"}}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"Risk\",\"name\":\"Simple Entity\",\"type\":\"public|private\",\"reference\":{\"id\":\"4000000062001\"}}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"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/settings/layouts");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"module\":\"Risk\",\"name\":\"Simple Entity\",\"type\":\"public|private\",\"reference\":{\"id\":\"4000000062001\"}}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"Risk\",\"name\":\"Simple Entity\",\"type\":\"public|private\",\"reference\":{\"id\":\"4000000062001\"}}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"Risk\",\"name\":\"Simple Entity\",\"type\":\"public|private\",\"reference\":{\"id\":\"4000000062001\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"Risk","name":"Simple Entity","type":"public|private","reference":{"id":"4000000062001"}}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "Risk", "name" : "Simple Entity", "type" : "public|private", "reference" : { "id" : "4000000062001" } }

Sample Response

201{ "name" : "Creating New Layout", "id" : "9000000076001", "is_default" : "false", "type" : "PUBLIC" }
Update Layout

Modify the details of an existing layout. Use this API to modify layout properties such as name or structure.

PATCH

/api/v3/portal/[PORTALID]/settings/layouts/[LAYOUTID]

OAuth Scope:

ZohoProjects.custom_fields.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]";
response = invokeUrl
[
    url: url
    type: PATCH
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.patch(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts/[LAYOUTID]");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.patch ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" -Method PATCH -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "name" : "Update Layout Name", "id" : "9000000076001", "is_default" : "false", "type" : "PUBLIC" }
Delete Layout

Remove a layout from the Zoho Projects portal.

DELETE

/api/v3/portal/[PORTALID]/settings/layouts/[LAYOUTID]

OAuth Scope:

ZohoProjects.custom_fields.DELETE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=Risk' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]";
params = Map();
params.put("module", "Risk");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]');
url.searchParams.append('module', 'Risk');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]")
params = {
  "module" => "Risk"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"

params = {
    "module": "Risk"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=%s", enc_module);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]";
        url += "?module=" + std::string(enc_module);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" "?module=" enc-module)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=Risk HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts/[LAYOUTID]");
uriBuilder.addParameter("module", "Risk");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]';

const params = new URLSearchParams({
  'module': 'Risk'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]?module=%@", encodedModule];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" ^ "?module=" ^ enc_module) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]"

params <- list(
  module = "Risk"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk"

Sample Response

204 No Content
Disassociate Field

Remove a field from a specific layout.

DELETE

/api/v3/portal/[PORTALID]/settings/layouts/[LAYOUTID]/fields/[FIELDID]

OAuth Scope:

ZohoProjects.custom_fields.DELETE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]?module=Risk' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]";
params = Map();
params.put("module", "Risk");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]');
url.searchParams.append('module', 'Risk');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]")
params = {
  "module" => "Risk"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]"

params = {
    "module": "Risk"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]?module=%s", enc_module);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]";
        url += "?module=" + std::string(enc_module);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]" "?module=" enc-module)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]?module=Risk HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts/[LAYOUTID]/fields/[FIELDID]");
uriBuilder.addParameter("module", "Risk");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]';

const params = new URLSearchParams({
  'module': 'Risk'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]?module=%@", encodedModule];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]" ^ "?module=" ^ enc_module) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]"

params <- list(
  module = "Risk"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/fields/[FIELDID]")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk"

Sample Response

204 No Content
Get Associated Records

Retrieve the list of records associated with a layout.

GET

/api/v3/portal/[PORTALID]/settings/layouts/[LAYOUTID]/associated-entities

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

JSONObject

Enter filter criteria to refine results. Use this to combine multiple filter conditions.

is_unassociated

String

required

Specify whether to retrieve records not associated with the layout.
Accepted values :true or false

search_term

String

required

Enter the search term.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities?module=Risk&%22filter%22=%7B%22ignore%22%3A%5B%7B%22id%22%3A%224000000062001%22%7D%5D%7D&is_unassociated=true&search_term=Zoho+Projects' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities";
params = Map();
params.put("module", "Risk");
params.put("filter", {"ignore":[{"id":"4000000062001"}]});
params.put("is_unassociated", "true");
params.put("search_term", "Zoho Projects");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities');
url.searchParams.append('module', 'Risk');
url.searchParams.append('"filter"', '{"ignore":[{"id":"4000000062001"}]}');
url.searchParams.append('is_unassociated', 'true');
url.searchParams.append('search_term', 'Zoho Projects');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities")
params = {
  "module" => "Risk",
  ""filter"" => "{\"ignore\":[{\"id\":\"4000000062001\"}]}",
  "is_unassociated" => "true",
  "search_term" => "Zoho Projects"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
    '"filter"' => '{"ignore":[{"id":"4000000062001"}]}',
    'is_unassociated' => 'true',
    'search_term' => 'Zoho Projects',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities"

params = {
    "module": "Risk",
    ""filter"": "{\"ignore\":[{\"id\":\"4000000062001\"}]}",
    "is_unassociated": "true",
    "search_term": "Zoho Projects"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"ignore\":[{\"id\":\"4000000062001\"}]}", 0);
        char *enc_is_unassociated = curl_easy_escape(curl, "true", 0);
        char *enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities?module=%s&\"filter\"=%s&is_unassociated=%s&search_term=%s", enc_module, enc_"filter", enc_is_unassociated, enc_search_term);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_free(enc_"filter");
        curl_free(enc_is_unassociated);
        curl_free(enc_search_term);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
query[""filter""] = "{\"ignore\":[{\"id\":\"4000000062001\"}]}";
query["is_unassociated"] = "true";
query["search_term"] = "Zoho Projects";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"ignore\":[{\"id\":\"4000000062001\"}]}", 0);
        char* enc_is_unassociated = curl_easy_escape(curl, "true", 0);
        char* enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities";
        url += "?module=" + std::string(enc_module);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&is_unassociated=" + std::string(enc_is_unassociated);
        url += "&search_term=" + std::string(enc_search_term);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_free(enc_"filter");
        curl_free(enc_is_unassociated);
        curl_free(enc_search_term);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"ignore\":[{\"id\":\"4000000062001\"}]}" "UTF-8")
      enc-is_unassociated (java.net.URLEncoder/encode "true" "UTF-8")
      enc-search_term (java.net.URLEncoder/encode "Zoho Projects" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities" "?module=" enc-module "&"filter"=" enc-"filter" "&is_unassociated=" enc-is_unassociated "&search_term=" enc-search_term)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    q.Add(""filter"", "{\"ignore\":[{\"id\":\"4000000062001\"}]}")
    q.Add("is_unassociated", "true")
    q.Add("search_term", "Zoho Projects")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities?module=Risk&%22filter%22=%7B%22ignore%22%3A%5B%7B%22id%22%3A%224000000062001%22%7D%5D%7D&is_unassociated=true&search_term=Zoho+Projects HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts/[LAYOUTID]/associated-entities");
uriBuilder.addParameter("module", "Risk");
uriBuilder.addParameter(""filter"", "{\"ignore\":[{\"id\":\"4000000062001\"}]}");
uriBuilder.addParameter("is_unassociated", "true");
uriBuilder.addParameter("search_term", "Zoho Projects");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities';

const params = new URLSearchParams({
  'module': 'Risk',
  '"filter"': '{"ignore":[{"id":"4000000062001"}]}',
  'is_unassociated': 'true',
  'search_term': 'Zoho Projects'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
"filter" = {"ignore":[{"id":"4000000062001"}]}
is_unassociated = "true"
search_term = "Zoho Projects"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    urlBuilder.addQueryParameter(""filter"", "{\"ignore\":[{\"id\":\"4000000062001\"}]}")
    urlBuilder.addQueryParameter("is_unassociated", "true")
    urlBuilder.addQueryParameter("search_term", "Zoho Projects")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"ignore\":[{\"id\":\"4000000062001\"}]}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIs_unassociated = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSearch_term = [@"Zoho Projects" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities?module=%@&"filter"=%@&is_unassociated=%@&search_term=%@", encodedModule, encoded"filter", encodedIs_unassociated, encodedSearch_term];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let enc_"filter" = Uri.pct_encode "{\"ignore\":[{\"id\":\"4000000062001\"}]}" in
  let enc_is_unassociated = Uri.pct_encode "true" in
  let enc_search_term = Uri.pct_encode "Zoho Projects" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities" ^ "?module=" ^ enc_module ^ "&"filter"=" ^ enc_"filter" ^ "&is_unassociated=" ^ enc_is_unassociated ^ "&search_term=" ^ enc_search_term) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
    "filter" = "{`"ignore`":[{`"id`":`"4000000062001`"}]}"
    is_unassociated = "true"
    search_term = "Zoho Projects"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities"

params <- list(
  module = "Risk",
  "filter" = "{\"ignore\":[{\"id\":\"4000000062001\"}]}",
  is_unassociated = "true",
  search_term = "Zoho Projects"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/associated-entities")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk"),
    URLQueryItem(name: ""filter"", value: "{\"ignore\":[{\"id\":\"4000000062001\"}]}"),
    URLQueryItem(name: "is_unassociated", value: "true"),
    URLQueryItem(name: "search_term", value: "Zoho Projects")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk" "filter" : { "ignore" : [ { "id" : "4000000062001" } ] } is_unassociated : "true" search_term : "Zoho Projects"

Sample Response

200[ { "name" : "Admin", "id" : 9000000002510 }, { "name" : "Manager", "id" : 9000000002513 } ]
Module Sections

This module covers operations related to the creation and management of sections within module layouts. Use this API to create, update, or delete sections.

Create or Update Section

Create a new section or update an existing section in a layout.

PUT

/api/v3/portal/[PORTALID]/settings/layouts/[LAYOUTID]/sections

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Parameter

Param Name
Data Type
Description
module

String

required
max length : 100

Enter the module API name or ID.

JSONObject

max length : 1000

Specify the position of the section in the layout.

id

long

Enter the section ID.

name

String

required
max length : 100

Enter the section name.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PUT \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections";
params = Map();
params.put("module", "Risk");
params.put("position", {"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"});
params.put("id", "4000000062001");
params.put("name", "Simple Entity");
response = invokeUrl
[
    url: url
    type: PUT
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections');

const payload = JSON.stringify({"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => '{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}'

response = requests.put(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"name\":\"Simple Entity\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections");
request.Content = new StringContent(
    @"{""module"":""Risk"",""position"":{""before_id"":""4009123452362"",""after_id"":""4009123452345"",""exact_position"":""0"",""known_position"":""first|last""},""id"":""4000000062001"",""name"":""Simple Entity""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"name\":\"Simple Entity\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"Risk\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"name\":\"Simple Entity\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"Risk\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"name\":\"Simple Entity\"}")
    req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PUT https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/layouts/[LAYOUTID]/sections");
HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"module\":\"Risk\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"name\":\"Simple Entity\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections';

const options = {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PUT"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"Risk\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"name\":\"Simple Entity\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}|json} in
  Lwt_main.run (
    Client.put ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections" -Method PUT -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections"

response <- PUT(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"Risk\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"name\":\"Simple Entity\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections")!
var request = URLRequest(url: url)
request.httpMethod = "PUT"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"Risk","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","name":"Simple Entity"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "Risk", "position" : { "before_id" : "4009123452362", "after_id" : "4009123452345", "exact_position" : "0", "known_position" : "first|last" }, "id" : "4000000062001", "name" : "Simple Entity" }

Sample Response

201{ "is_rename_enabled" : "true", "is_removable" : "true", "is_reorder_enabled" : "true", "name" : "New Section In Layout", "is_field_association_enabled" : "true", "id" : "9000000078001", "is_default" : "false" }
Delete Section

Remove a section from a layout. Use Get Layout Details API to retrieve the section_id.

DELETE

/api/v3/portal/[PORTALID]/settings/layouts/[LAYOUTID]/sections/[SECTIONID]

OAuth Scope:

ZohoProjects.custom_fields.DELETE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]?module=Risk' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]";
params = Map();
params.put("module", "Risk");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]');
url.searchParams.append('module', 'Risk');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]")
params = {
  "module" => "Risk"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]"

params = {
    "module": "Risk"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]?module=%s", enc_module);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]";
        url += "?module=" + std::string(enc_module);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]" "?module=" enc-module)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]?module=Risk HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/layouts/[LAYOUTID]/sections/[SECTIONID]");
uriBuilder.addParameter("module", "Risk");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]';

const params = new URLSearchParams({
  'module': 'Risk'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]?module=%@", encodedModule];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]" ^ "?module=" ^ enc_module) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]"

params <- list(
  module = "Risk"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/layouts/[LAYOUTID]/sections/[SECTIONID]")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk"

Sample Response

204 No Content
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

Retrieve the list of fields available in a module along with their metadata such as API name, display name, and field type. Use this API to understand the structure of a module before creating or updating records. Retrieve module_id using Get Modules API

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 API name or ID.

JSONObject

Enter filter criteria to refine results. Use this to combine multiple filter conditions.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields?module=Risk&%22filter%22=%7B%22is_mandatory%22%3A%22true%22%2C%22is_renamed%22%3A%22true%22%2C%22is_default%22%3Atrue%2C%22is_unassociated%22%3A%22true%22%2C%22is_association_info_needed%22%3A%22true%22%2C%22is_formula_based_list%22%3A%22true%22%2C%22layout_id%22%3A%224000003211234%22%2C%22project_id%22%3A%224009238123434%22%2C%22field_ids%22%3A%5B%224009238123888%22%5D%2C%22fields%22%3A%5B%22name%22%5D%2C%22search_term%22%3A%22Zoho+Projects%22%7D&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields";
params = Map();
params.put("module", "Risk");
params.put("filter", {"is_mandatory":"true","is_renamed":"true","is_default":true,"is_unassociated":"true","is_association_info_needed":"true","is_formula_based_list":"true","layout_id":"4000003211234","project_id":"4009238123434","field_ids":["4009238123888"],"fields":["name"],"search_term":"Zoho Projects"});
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields');
url.searchParams.append('module', 'Risk');
url.searchParams.append('"filter"', '{"is_mandatory":"true","is_renamed":"true","is_default":true,"is_unassociated":"true","is_association_info_needed":"true","is_formula_based_list":"true","layout_id":"4000003211234","project_id":"4009238123434","field_ids":["4009238123888"],"fields":["name"],"search_term":"Zoho Projects"}');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields")
params = {
  "module" => "Risk",
  ""filter"" => "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
    '"filter"' => '{"is_mandatory":"true","is_renamed":"true","is_default":true,"is_unassociated":"true","is_association_info_needed":"true","is_formula_based_list":"true","layout_id":"4000003211234","project_id":"4009238123434","field_ids":["4009238123888"],"fields":["name"],"search_term":"Zoho Projects"}',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields"

params = {
    "module": "Risk",
    ""filter"": "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields?module=%s&\"filter\"=%s&page=%s&per_page=%s", enc_module, enc_"filter", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
query[""filter""] = "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields";
        url += "?module=" + std::string(enc_module);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields" "?module=" enc-module "&"filter"=" enc-"filter" "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    q.Add(""filter"", "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields?module=Risk&%22filter%22=%7B%22is_mandatory%22%3A%22true%22%2C%22is_renamed%22%3A%22true%22%2C%22is_default%22%3Atrue%2C%22is_unassociated%22%3A%22true%22%2C%22is_association_info_needed%22%3A%22true%22%2C%22is_formula_based_list%22%3A%22true%22%2C%22layout_id%22%3A%224000003211234%22%2C%22project_id%22%3A%224009238123434%22%2C%22field_ids%22%3A%5B%224009238123888%22%5D%2C%22fields%22%3A%5B%22name%22%5D%2C%22search_term%22%3A%22Zoho+Projects%22%7D&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("module", "Risk");
uriBuilder.addParameter(""filter"", "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields';

const params = new URLSearchParams({
  'module': 'Risk',
  '"filter"': '{"is_mandatory":"true","is_renamed":"true","is_default":true,"is_unassociated":"true","is_association_info_needed":"true","is_formula_based_list":"true","layout_id":"4000003211234","project_id":"4009238123434","field_ids":["4009238123888"],"fields":["name"],"search_term":"Zoho Projects"}',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
"filter" = {"is_mandatory":"true","is_renamed":"true","is_default":true,"is_unassociated":"true","is_association_info_needed":"true","is_formula_based_list":"true","layout_id":"4000003211234","project_id":"4009238123434","field_ids":["4009238123888"],"fields":["name"],"search_term":"Zoho Projects"}
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    urlBuilder.addQueryParameter(""filter"", "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields?module=%@&"filter"=%@&page=%@&per_page=%@", encodedModule, encoded"filter", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let enc_"filter" = Uri.pct_encode "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields" ^ "?module=" ^ enc_module ^ "&"filter"=" ^ enc_"filter" ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
    "filter" = "{`"is_mandatory`":`"true`",`"is_renamed`":`"true`",`"is_default`":true,`"is_unassociated`":`"true`",`"is_association_info_needed`":`"true`",`"is_formula_based_list`":`"true`",`"layout_id`":`"4000003211234`",`"project_id`":`"4009238123434`",`"field_ids`":[`"4009238123888`"],`"fields`":[`"name`"],`"search_term`":`"Zoho Projects`"}"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields"

params <- list(
  module = "Risk",
  "filter" = "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk"),
    URLQueryItem(name: ""filter"", value: "{\"is_mandatory\":\"true\",\"is_renamed\":\"true\",\"is_default\":true,\"is_unassociated\":\"true\",\"is_association_info_needed\":\"true\",\"is_formula_based_list\":\"true\",\"layout_id\":\"4000003211234\",\"project_id\":\"4009238123434\",\"field_ids\":[\"4009238123888\"],\"fields\":[\"name\"],\"search_term\":\"Zoho Projects\"}"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk" "filter" : { "is_mandatory" : "true", "is_renamed" : "true", "is_default" : true, "is_unassociated" : "true", "is_association_info_needed" : "true", "is_formula_based_list" : "true", "layout_id" : "4000003211234", "project_id" : "4009238123434", "field_ids" : [ "4009238123888" ], "fields" : [ "name" ], "search_term" : "Zoho Projects" } page : "1" per_page : "10"

Sample Response

200[ { "id" : "7000000309482", "field_name" : "name", "display_name" : "Name", "field_type" : "singleline", "is_default" : true, "field_property" : { "field_type_properties" : { "max_length" : 100 }, "is_pii" : false, "is_encrypted" : false, "metadata_property" : { "is_property_mutable" : false, "is_removable" : false, "is_mandate_enabled" : false, "has_field_level_permission" : false }, "scope" : "global_scope" }, "is_deactivated" : false } ]
Create or Update Field

Create a new field or update an existing field in a module layout. Use this API to define custom fields, configure their properties, and place them within layout sections.

PUT

/api/v3/portal/[PORTALID]/settings/fields

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Parameter

Param Name
Data Type
Description
module

String

required
max length : 100

Enter the module API name or ID.

layout_id

long

Enter the layout ID.

section_id

long

Enter the section ID.

JSONObject

max length : 1000

Specify the position of the section in the layout.

id

long

Enter field ID to update. Omit to create a new field.

display_name

String

max length : 250

Enter the field label shown in UI.

field_type

String

max length : 100

Enter the field type (e.g., singleline, picklist, date).

data_type

String

max length : 100

Enter backend data type (e.g., CHAR, DATE, DOUBLE).

field_property

JSONObject

max length : 1000

Enter the field property.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PUT \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields";
params = Map();
params.put("module", "Risk");
params.put("layout_id", "4000003211234");
params.put("section_id", "4009234211234");
params.put("position", {"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"});
params.put("id", "4000000062001");
params.put("display_name", "start_date");
params.put("field_type", "start_date");
params.put("data_type", "-");
params.put("field_property", {"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}});
response = invokeUrl
[
    url: url
    type: PUT
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields');

const payload = JSON.stringify({"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => '{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}'

response = requests.put(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"layout_id\":\"4000003211234\",\"section_id\":\"4009234211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"display_name\":\"start_date\",\"field_type\":\"start_date\",\"data_type\":\"-\",\"field_property\":{\"description\":\"-\",\"is_pii\":\"-\",\"is_encrypted\":\"-\",\"context_property\":{\"default_value\":\"-\",\"is_mandatory\":\"true\",\"has_info\":\"-\",\"permission\":\"-\",\"is_added_to_resolution\":\"-\",\"is_added_to_public_form\":\"-\"},\"field_type_properties\":{\"currencylist_type\":\"project_currency|field_currency\",\"currency_value\":\"-\",\"precision_value\":\"-\",\"userlist_type\":\"all_users|selected_users|selected_roles\"}}}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields");
request.Content = new StringContent(
    @"{""module"":""Risk"",""layout_id"":""4000003211234"",""section_id"":""4009234211234"",""position"":{""before_id"":""4009123452362"",""after_id"":""4009123452345"",""exact_position"":""0"",""known_position"":""first|last""},""id"":""4000000062001"",""display_name"":""start_date"",""field_type"":""start_date"",""data_type"":""-"",""field_property"":{""description"":""-"",""is_pii"":""-"",""is_encrypted"":""-"",""context_property"":{""default_value"":""-"",""is_mandatory"":""true"",""has_info"":""-"",""permission"":""-"",""is_added_to_resolution"":""-"",""is_added_to_public_form"":""-""},""field_type_properties"":{""currencylist_type"":""project_currency|field_currency"",""currency_value"":""-"",""precision_value"":""-"",""userlist_type"":""all_users|selected_users|selected_roles""}}}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"layout_id\":\"4000003211234\",\"section_id\":\"4009234211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"display_name\":\"start_date\",\"field_type\":\"start_date\",\"data_type\":\"-\",\"field_property\":{\"description\":\"-\",\"is_pii\":\"-\",\"is_encrypted\":\"-\",\"context_property\":{\"default_value\":\"-\",\"is_mandatory\":\"true\",\"has_info\":\"-\",\"permission\":\"-\",\"is_added_to_resolution\":\"-\",\"is_added_to_public_form\":\"-\"},\"field_type_properties\":{\"currencylist_type\":\"project_currency|field_currency\",\"currency_value\":\"-\",\"precision_value\":\"-\",\"userlist_type\":\"all_users|selected_users|selected_roles\"}}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"Risk\",\"layout_id\":\"4000003211234\",\"section_id\":\"4009234211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"display_name\":\"start_date\",\"field_type\":\"start_date\",\"data_type\":\"-\",\"field_property\":{\"description\":\"-\",\"is_pii\":\"-\",\"is_encrypted\":\"-\",\"context_property\":{\"default_value\":\"-\",\"is_mandatory\":\"true\",\"has_info\":\"-\",\"permission\":\"-\",\"is_added_to_resolution\":\"-\",\"is_added_to_public_form\":\"-\"},\"field_type_properties\":{\"currencylist_type\":\"project_currency|field_currency\",\"currency_value\":\"-\",\"precision_value\":\"-\",\"userlist_type\":\"all_users|selected_users|selected_roles\"}}}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"Risk\",\"layout_id\":\"4000003211234\",\"section_id\":\"4009234211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"display_name\":\"start_date\",\"field_type\":\"start_date\",\"data_type\":\"-\",\"field_property\":{\"description\":\"-\",\"is_pii\":\"-\",\"is_encrypted\":\"-\",\"context_property\":{\"default_value\":\"-\",\"is_mandatory\":\"true\",\"has_info\":\"-\",\"permission\":\"-\",\"is_added_to_resolution\":\"-\",\"is_added_to_public_form\":\"-\"},\"field_type_properties\":{\"currencylist_type\":\"project_currency|field_currency\",\"currency_value\":\"-\",\"precision_value\":\"-\",\"userlist_type\":\"all_users|selected_users|selected_roles\"}}}")
    req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PUT https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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 HttpPut(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"module\":\"Risk\",\"layout_id\":\"4000003211234\",\"section_id\":\"4009234211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"display_name\":\"start_date\",\"field_type\":\"start_date\",\"data_type\":\"-\",\"field_property\":{\"description\":\"-\",\"is_pii\":\"-\",\"is_encrypted\":\"-\",\"context_property\":{\"default_value\":\"-\",\"is_mandatory\":\"true\",\"has_info\":\"-\",\"permission\":\"-\",\"is_added_to_resolution\":\"-\",\"is_added_to_public_form\":\"-\"},\"field_type_properties\":{\"currencylist_type\":\"project_currency|field_currency\",\"currency_value\":\"-\",\"precision_value\":\"-\",\"userlist_type\":\"all_users|selected_users|selected_roles\"}}}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields';

const options = {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PUT"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"Risk\",\"layout_id\":\"4000003211234\",\"section_id\":\"4009234211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"display_name\":\"start_date\",\"field_type\":\"start_date\",\"data_type\":\"-\",\"field_property\":{\"description\":\"-\",\"is_pii\":\"-\",\"is_encrypted\":\"-\",\"context_property\":{\"default_value\":\"-\",\"is_mandatory\":\"true\",\"has_info\":\"-\",\"permission\":\"-\",\"is_added_to_resolution\":\"-\",\"is_added_to_public_form\":\"-\"},\"field_type_properties\":{\"currencylist_type\":\"project_currency|field_currency\",\"currency_value\":\"-\",\"precision_value\":\"-\",\"userlist_type\":\"all_users|selected_users|selected_roles\"}}}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}|json} in
  Lwt_main.run (
    Client.put ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields" -Method PUT -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields"

response <- PUT(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"Risk\",\"layout_id\":\"4000003211234\",\"section_id\":\"4009234211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"id\":\"4000000062001\",\"display_name\":\"start_date\",\"field_type\":\"start_date\",\"data_type\":\"-\",\"field_property\":{\"description\":\"-\",\"is_pii\":\"-\",\"is_encrypted\":\"-\",\"context_property\":{\"default_value\":\"-\",\"is_mandatory\":\"true\",\"has_info\":\"-\",\"permission\":\"-\",\"is_added_to_resolution\":\"-\",\"is_added_to_public_form\":\"-\"},\"field_type_properties\":{\"currencylist_type\":\"project_currency|field_currency\",\"currency_value\":\"-\",\"precision_value\":\"-\",\"userlist_type\":\"all_users|selected_users|selected_roles\"}}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields")!
var request = URLRequest(url: url)
request.httpMethod = "PUT"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"Risk","layout_id":"4000003211234","section_id":"4009234211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"id":"4000000062001","display_name":"start_date","field_type":"start_date","data_type":"-","field_property":{"description":"-","is_pii":"-","is_encrypted":"-","context_property":{"default_value":"-","is_mandatory":"true","has_info":"-","permission":"-","is_added_to_resolution":"-","is_added_to_public_form":"-"},"field_type_properties":{"currencylist_type":"project_currency|field_currency","currency_value":"-","precision_value":"-","userlist_type":"all_users|selected_users|selected_roles"}}}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "Risk", "layout_id" : "4000003211234", "section_id" : "4009234211234", "position" : { "before_id" : "4009123452362", "after_id" : "4009123452345", "exact_position" : "0", "known_position" : "first|last" }, "id" : "4000000062001", "display_name" : "start_date", "field_type" : "start_date", "data_type" : "-", "field_property" : { "description" : "-", "is_pii" : "-", "is_encrypted" : "-", "context_property" : { "default_value" : "-", "is_mandatory" : "true", "has_info" : "-", "permission" : "-", "is_added_to_resolution" : "-", "is_added_to_public_form" : "-" }, "field_type_properties" : { "currencylist_type" : "project_currency|field_currency", "currency_value" : "-", "precision_value" : "-", "userlist_type" : "all_users|selected_users|selected_roles" } } }

Sample Response

201{ "is_default" : "false?", "field_property" : { "is_pii" : "true", "is_encrypted" : "false", "scope" : "LAYOUT_SCOPE", "description" : "URL to access ly", "field_type_properties" : { "max_length" : "255" }, "context_property" : { "is_mandatory" : "true", "has_info" : "true" } }, "id" : "9000000079015", "display_name" : "URL fields", "field_type" : "url", "field_name" : "url_fields" }
Delete Field

Remove a field from the module.

DELETE

/api/v3/portal/[PORTALID]/settings/fields/[FIELDID]

OAuth Scope:

ZohoProjects.custom_fields.DELETE

Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]?module=Risk' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]";
params = Map();
params.put("module", "Risk");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]');
url.searchParams.append('module', 'Risk');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]")
params = {
  "module" => "Risk"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]"

params = {
    "module": "Risk"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]?module=%s", enc_module);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]";
        url += "?module=" + std::string(enc_module);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]" "?module=" enc-module)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]?module=Risk HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/[FIELDID]");
uriBuilder.addParameter("module", "Risk");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]';

const params = new URLSearchParams({
  'module': 'Risk'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]?module=%@", encodedModule];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]" ^ "?module=" ^ enc_module) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]"

params <- list(
  module = "Risk"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk"

Sample Response

204 No Content
Get Associated Layouts

Retrieve layouts where a field is used.

GET

/api/v3/portal/[PORTALID]/settings/fields/[FIELDID]/associated-layouts

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

JSONObject

Enter filter criteria to refine results. Use this to combine multiple filter conditions.

page

int

Specify the page of associated layouts.

per_page

int

Specify the range of associated layouts.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts?module=Risk&%22filter%22=%7B%22ignore%22%3A%5B%7B%22id%22%3A%224000000062001%22%7D%5D%2C%22search_term%22%3A%22Zoho+Projects%22%7D&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts";
params = Map();
params.put("module", "Risk");
params.put("filter", {"ignore":[{"id":"4000000062001"}],"search_term":"Zoho Projects"});
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts');
url.searchParams.append('module', 'Risk');
url.searchParams.append('"filter"', '{"ignore":[{"id":"4000000062001"}],"search_term":"Zoho Projects"}');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts")
params = {
  "module" => "Risk",
  ""filter"" => "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
    '"filter"' => '{"ignore":[{"id":"4000000062001"}],"search_term":"Zoho Projects"}',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts"

params = {
    "module": "Risk",
    ""filter"": "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts?module=%s&\"filter\"=%s&page=%s&per_page=%s", enc_module, enc_"filter", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
query[""filter""] = "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts";
        url += "?module=" + std::string(enc_module);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts" "?module=" enc-module "&"filter"=" enc-"filter" "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    q.Add(""filter"", "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts?module=Risk&%22filter%22=%7B%22ignore%22%3A%5B%7B%22id%22%3A%224000000062001%22%7D%5D%2C%22search_term%22%3A%22Zoho+Projects%22%7D&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/[FIELDID]/associated-layouts");
uriBuilder.addParameter("module", "Risk");
uriBuilder.addParameter(""filter"", "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts';

const params = new URLSearchParams({
  'module': 'Risk',
  '"filter"': '{"ignore":[{"id":"4000000062001"}],"search_term":"Zoho Projects"}',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
"filter" = {"ignore":[{"id":"4000000062001"}],"search_term":"Zoho Projects"}
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    urlBuilder.addQueryParameter(""filter"", "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts?module=%@&"filter"=%@&page=%@&per_page=%@", encodedModule, encoded"filter", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let enc_"filter" = Uri.pct_encode "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts" ^ "?module=" ^ enc_module ^ "&"filter"=" ^ enc_"filter" ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
    "filter" = "{`"ignore`":[{`"id`":`"4000000062001`"}],`"search_term`":`"Zoho Projects`"}"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts"

params <- list(
  module = "Risk",
  "filter" = "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/fields/[FIELDID]/associated-layouts")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk"),
    URLQueryItem(name: ""filter"", value: "{\"ignore\":[{\"id\":\"4000000062001\"}],\"search_term\":\"Zoho Projects\"}"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk" "filter" : { "ignore" : [ { "id" : "4000000062001" } ], "search_term" : "Zoho Projects" } page : "1" per_page : "10"

Sample Response

200[ { "name" : "Associated Layout 1", "id" : 9000000009003 }, { "name" : "Associated Layout 2", "id" : 9000000025001 } ]
Module Options

This module covers operations related to the fields within Zoho Projects modules. Use this API to retrieve, create, update, or delete options for fields, as well as disassociate or apply bulk options for fields.

Get Field Options

Retrieve available options for a field. Use this API for picklist values, statuses, or selectable options.

GET

/api/v3/portal/[PORTALID]/settings/options

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

field

String

required

Enter the field name or ID.

JSONObject

Enter filter criteria to refine results. Use this to combine multiple filter conditions.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options?module=Risk&field=4000003212456&%22filter%22=%7B%22project_id%22%3A%224009238123434%22%2C%22layout_id%22%3A%224000003211234%22%2C%22is_unassociated%22%3A%22true%22%7D&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";
params = Map();
params.put("module", "Risk");
params.put("field", "4000003212456");
params.put("filter", {"project_id":"4009238123434","layout_id":"4000003211234","is_unassociated":"true"});
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options');
url.searchParams.append('module', 'Risk');
url.searchParams.append('field', '4000003212456');
url.searchParams.append('"filter"', '{"project_id":"4009238123434","layout_id":"4000003211234","is_unassociated":"true"}');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")
params = {
  "module" => "Risk",
  "field" => "4000003212456",
  ""filter"" => "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'Risk',
    'field' => '4000003212456',
    '"filter"' => '{"project_id":"4009238123434","layout_id":"4000003211234","is_unassociated":"true"}',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

params = {
    "module": "Risk",
    "field": "4000003212456",
    ""filter"": "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "Risk", 0);
        char *enc_field = curl_easy_escape(curl, "4000003212456", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options?module=%s&field=%s&\"filter\"=%s&page=%s&per_page=%s", enc_module, enc_field, enc_"filter", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_free(enc_field);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "Risk";
query["field"] = "4000003212456";
query[""filter""] = "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "Risk", 0);
        char* enc_field = curl_easy_escape(curl, "4000003212456", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";
        url += "?module=" + std::string(enc_module);
        url += "&field=" + std::string(enc_field);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_free(enc_field);
        curl_free(enc_"filter");
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "Risk" "UTF-8")
      enc-field (java.net.URLEncoder/encode "4000003212456" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" "?module=" enc-module "&field=" enc-field "&"filter"=" enc-"filter" "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options", nil)
    q := req.URL.Query()
    q.Add("module", "Risk")
    q.Add("field", "4000003212456")
    q.Add(""filter"", "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options?module=Risk&field=4000003212456&%22filter%22=%7B%22project_id%22%3A%224009238123434%22%2C%22layout_id%22%3A%224000003211234%22%2C%22is_unassociated%22%3A%22true%22%7D&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/options");
uriBuilder.addParameter("module", "Risk");
uriBuilder.addParameter("field", "4000003212456");
uriBuilder.addParameter(""filter"", "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options';

const params = new URLSearchParams({
  'module': 'Risk',
  'field': '4000003212456',
  '"filter"': '{"project_id":"4009238123434","layout_id":"4000003211234","is_unassociated":"true"}',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "Risk"
field = "4000003212456"
"filter" = {"project_id":"4009238123434","layout_id":"4000003211234","is_unassociated":"true"}
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "Risk")
    urlBuilder.addQueryParameter("field", "4000003212456")
    urlBuilder.addQueryParameter(""filter"", "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"Risk" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedField = [@"4000003212456" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options?module=%@&field=%@&"filter"=%@&page=%@&per_page=%@", encodedModule, encodedField, encoded"filter", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "Risk" in
  let enc_field = Uri.pct_encode "4000003212456" in
  let enc_"filter" = Uri.pct_encode "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" ^ "?module=" ^ enc_module ^ "&field=" ^ enc_field ^ "&"filter"=" ^ enc_"filter" ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "Risk"
    field = "4000003212456"
    "filter" = "{`"project_id`":`"4009238123434`",`"layout_id`":`"4000003211234`",`"is_unassociated`":`"true`"}"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

params <- list(
  module = "Risk",
  field = "4000003212456",
  "filter" = "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")!
components.queryItems = [
    URLQueryItem(name: "module", value: "Risk"),
    URLQueryItem(name: "field", value: "4000003212456"),
    URLQueryItem(name: ""filter"", value: "{\"project_id\":\"4009238123434\",\"layout_id\":\"4000003211234\",\"is_unassociated\":\"true\"}"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "Risk" field : "4000003212456" "filter" : { "project_id" : "4009238123434", "layout_id" : "4000003211234", "is_unassociated" : "true" } page : "1" per_page : "10"

Sample Response

200[ { "id" : "9000000063027", "value" : "Option 1" }, { "id" : "9000000063029", "value" : "Option 2" }, { "id" : "9000000063031", "value" : "Option 3" }, { "id" : "9000000064001", "value" : "Option 4" } ]
Create Bulk Options

Create multiple options for a field.

POST

/api/v3/portal/[PORTALID]/settings/options

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Parameter

Param Name
Data Type
Description
module

String

required
max length : 100

Enter the module API name or ID.

field

String

required

Enter the field ID.

layout_id

long

Enter the layout ID.

JSONObject

max length : 1000

Specify the position of the option in the layout.

JSONArray

max length : 1000

Enter the role ID details.

JSONArray

max length : 1000

Enter the user ID details.

JSONArray

max length : 1000

Enter the status ID details.

custom_options

JSONArray

max length : 1000

Specify the custom options with the ID and value.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";
params = Map();
params.put("module", "Risk");
params.put("field", "4000003212456");
params.put("layout_id", "4000003211234");
params.put("position", {"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"});
params.put("roles", [{"id":"4000000062001"}]);
params.put("users", [{"zpuid":"4000000002055"}]);
params.put("statuses", [{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}]);
params.put("custom_options", [{"id":"4000000062001","value":["1752587000000097269"]}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options');

const payload = JSON.stringify({"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
request.Content = new StringContent(
    @"{""module"":""Risk"",""field"":""4000003212456"",""layout_id"":""4000003211234"",""position"":{""before_id"":""4009123452362"",""after_id"":""4009123452345"",""exact_position"":""0"",""known_position"":""first|last""},""roles"":[{""id"":""4000000062001""}],""users"":[{""zpuid"":""4000000002055""}],""statuses"":[{""id"":""4000000062001"",""name"":""Simple Entity"",""color"":""#FFFFFF"",""is_closed_type"":""true"",""transitions"":[{""id"":""4000000062001""}]}],""custom_options"":[{""id"":""4000000062001"",""value"":[""1752587000000097269""]}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/options");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "Risk", "field" : "4000003212456", "layout_id" : "4000003211234", "position" : { "before_id" : "4009123452362", "after_id" : "4009123452345", "exact_position" : "0", "known_position" : "first|last" }, "roles" : [ { "id" : "4000000062001" } ], "users" : [ { "zpuid" : "4000000002055" } ], "statuses" : [ { "id" : "4000000062001", "name" : "Simple Entity", "color" : "#FFFFFF", "is_closed_type" : "true", "transitions" : [ { "id" : "4000000062001" } ] } ], "custom_options" : [ { "id" : "4000000062001", "value" : [ "1752587000000097269" ] } ] }

Sample Response

201{ "custom_options" : [ { "id" : "9000000080017", "value" : "Bulk Add1" }, { "id" : "9000000080019", "value" : "Bulk Add2" } ] }
Delete or Disassociate Field Options

Remove or disassociate multiple options from a field.

DELETE

/api/v3/portal/[PORTALID]/settings/options

OAuth Scope:

ZohoProjects.custom_fields.DELETE

Parameter

Param Name
Data Type
Description
module

String

required
max length : 100

Enter the module API name or ID where the field exists. Retrieve using Get Modules API.

field

String

required

Enter the field ID from which options should be removed. Retrieve using Get Fields API.

layout_id

long

Enter the layout ID to remove layout-specific associations. If not provided, the option is removed globally.

JSONArray

max length : 1000

Enter the role ID details.

JSONArray

max length : 1000

Enter the user ID details.

JSONArray

max length : 1000

Enter the status ID details.

custom_options

JSONArray

max length : 1000

Specify the custom options with the ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";
params = Map();
params.put("module", "Risk");
params.put("field", "4000003212456");
params.put("layout_id", "4000003211234");
params.put("roles", [{"id":"4000000062001"}]);
params.put("users", [{"zpuid":"4000000002055"}]);
params.put("statuses", [{"id":"4000000062001"}]);
params.put("custom_options", [{"id":"4000000062001"}]);
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options');

const payload = JSON.stringify({"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}'

response = requests.delete(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\"}],\"custom_options\":[{\"id\":\"4000000062001\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
request.Content = new StringContent(
    @"{""module"":""Risk"",""field"":""4000003212456"",""layout_id"":""4000003211234"",""roles"":[{""id"":""4000000062001""}],""users"":[{""zpuid"":""4000000002055""}],""statuses"":[{""id"":""4000000062001""}],""custom_options"":[{""id"":""4000000062001""}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\"}],\"custom_options\":[{\"id\":\"4000000062001\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\"}],\"custom_options\":[{\"id\":\"4000000062001\"}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\"}],\"custom_options\":[{\"id\":\"4000000062001\"}]}")
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"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/settings/options");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\"}],\"custom_options\":[{\"id\":\"4000000062001\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}|json} in
  Lwt_main.run (
    Client.delete ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" -Method DELETE -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\"}],\"custom_options\":[{\"id\":\"4000000062001\"}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001"}],"custom_options":[{"id":"4000000062001"}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "Risk", "field" : "4000003212456", "layout_id" : "4000003211234", "roles" : [ { "id" : "4000000062001" } ], "users" : [ { "zpuid" : "4000000002055" } ], "statuses" : [ { "id" : "4000000062001" } ], "custom_options" : [ { "id" : "4000000062001" } ] }

Sample Response

200{ "custom_options" : [ "9000000080007" ] }
Update Field Options

Update existing options for a field. Use this API to rename or reorder options.

PATCH

/api/v3/portal/[PORTALID]/settings/options

OAuth Scope:

ZohoProjects.custom_fields.UPDATE

Parameter

Param Name
Data Type
Description
module

String

required
max length : 100

Enter the module API name or ID.

field

String

required

Enter the field ID for which options need to be created.

layout_id

long

Enter the layout ID to update layout-specific option configuration.

JSONObject

max length : 1000

Specify the position of the option in the layout.

JSONArray

max length : 1000

Enter the role ID details.

JSONArray

max length : 1000

Enter the user ID details.

JSONArray

max length : 1000

Enter the status ID details.

custom_options

JSONArray

max length : 1000

Specify the custom options with the ID and value.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";
params = Map();
params.put("module", "Risk");
params.put("field", "4000003212456");
params.put("layout_id", "4000003211234");
params.put("position", {"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"});
params.put("roles", [{"id":"4000000062001"}]);
params.put("users", [{"zpuid":"4000000002055"}]);
params.put("statuses", [{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}]);
params.put("custom_options", [{"id":"4000000062001","value":["1752587000000097269"]}]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options');

const payload = JSON.stringify({"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
request.Content = new StringContent(
    @"{""module"":""Risk"",""field"":""4000003212456"",""layout_id"":""4000003211234"",""position"":{""before_id"":""4009123452362"",""after_id"":""4009123452345"",""exact_position"":""0"",""known_position"":""first|last""},""roles"":[{""id"":""4000000062001""}],""users"":[{""zpuid"":""4000000002055""}],""statuses"":[{""id"":""4000000062001"",""name"":""Simple Entity"",""color"":""#FFFFFF"",""is_closed_type"":""true"",""transitions"":[{""id"":""4000000062001""}]}],""custom_options"":[{""id"":""4000000062001"",""value"":[""1752587000000097269""]}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/options");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"Risk\",\"field\":\"4000003212456\",\"layout_id\":\"4000003211234\",\"position\":{\"before_id\":\"4009123452362\",\"after_id\":\"4009123452345\",\"exact_position\":\"0\",\"known_position\":\"first|last\"},\"roles\":[{\"id\":\"4000000062001\"}],\"users\":[{\"zpuid\":\"4000000002055\"}],\"statuses\":[{\"id\":\"4000000062001\",\"name\":\"Simple Entity\",\"color\":\"#FFFFFF\",\"is_closed_type\":\"true\",\"transitions\":[{\"id\":\"4000000062001\"}]}],\"custom_options\":[{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"]}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/options")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"Risk","field":"4000003212456","layout_id":"4000003211234","position":{"before_id":"4009123452362","after_id":"4009123452345","exact_position":"0","known_position":"first|last"},"roles":[{"id":"4000000062001"}],"users":[{"zpuid":"4000000002055"}],"statuses":[{"id":"4000000062001","name":"Simple Entity","color":"#FFFFFF","is_closed_type":"true","transitions":[{"id":"4000000062001"}]}],"custom_options":[{"id":"4000000062001","value":["1752587000000097269"]}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "Risk", "field" : "4000003212456", "layout_id" : "4000003211234", "position" : { "before_id" : "4009123452362", "after_id" : "4009123452345", "exact_position" : "0", "known_position" : "first|last" }, "roles" : [ { "id" : "4000000062001" } ], "users" : [ { "zpuid" : "4000000002055" } ], "statuses" : [ { "id" : "4000000062001", "name" : "Simple Entity", "color" : "#FFFFFF", "is_closed_type" : "true", "transitions" : [ { "id" : "4000000062001" } ] } ], "custom_options" : [ { "id" : "4000000062001", "value" : [ "1752587000000097269" ] } ] }

Sample Response

200{ "custom_options" : [ { "id" : "9000000080017", "value" : "Updated Option Name" } ] }
Module Integration Field

This module covers operations related to integration fields within Zoho Projects. Use this API to retrieve, create, update, or delete integration fields, and manage their associations with modules.

Get Services

Retrieve external services available for integration fields.

GET

/api/v3/portal/[PORTALID]/integration-field/service

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/integration-field/service");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "data" : [ { "api_name" : "zoho-crm", "display_name" : "Zoho CRM" } ] }
Get Service Modules

Retrieve modules available within an external service.

GET

/api/v3/portal/[PORTALID]/integration-field/service/[SERVICEID]/modules

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/integration-field/service/[SERVICEID]/modules");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/modules")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "data" : [ { "api_name" : "Leads", "display_name" : "Leads" } ] }
Get Module's Fields

Retrieve fields from an external service module. Use this API to map external fields to Zoho Projects fields.

GET

/api/v3/portal/[PORTALID]/integration-field/service/[SERVICEID]/module/[MODULEID]/fields

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/integration-field/service/[SERVICEID]/module/[MODULEID]/fields");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/integration-field/service/[SERVICEID]/module/[MODULEID]/fields")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "data" : [ { "api_name" : "Owner.name", "data_type" : "ownerlookup", "display_name" : "Lead Owner (name)", "json_type" : "jsonobject" } ] }
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 the 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.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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.0, "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_hours" : "00:00", "bcy_forecasted_cost" : { "amount" : 0.0, "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "forecasted_hours" : "00:00", "remaining_hours" : "00:00", "actual_cost" : { "amount" : 0.0, "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "actual_hours" : "00:00", "bcy_planned_cost" : { "amount" : 0.0, "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_cost" : { "amount" : 0.0, "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "budget_type" : "based_on_project", "bcy_actual_cost" : { "amount" : 0.0, "formatted_amount" : "$ 0.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "cost_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" : "Daniel", "last_name" : "Cooper", "first_name" : "Daniel", "zuid" : "25450833" }, "percent_complete" : "0", "tags" : [ { "id" : "7000000015084", "color_hexcode" : "#7dcf7b" } ], "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" : "Daniel", "last_name" : "Cooper", "first_name" : "Daniel", "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 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 details.

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 project status ID.

JSONObject

max length : 1000

Enter the layout ID to associate with the project.

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 configuration details.

project_group

JSONObject

max length : 1000

Enter the project group details.

sub_module_settings

JSONObject

Specify the sub-module settings, to declare sub_module realated configurations.

JSONArray

max length : 10000

Specify tag details to associate with the project.

copy_from

long

Enter the template ID or existing project ID to copy configuration from.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects";
params = Map();
params.put("name", "-");
params.put("description", "-");
params.put("project_type", "-");
params.put("owner", {"zpuid":"4000000002055"});
params.put("is_public_project", "-");
params.put("start_date", "2023-12-20");
params.put("end_date", "2024-12-20");
params.put("status", {"id":"4000000062001"});
params.put("layout", {"id":"4000000062001"});
params.put("added_via", "-");
params.put("is_rollup_project", "-");
params.put("budget_info", {"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}});
params.put("project_group", {"id":"4000000062001"});
params.put("sub_module_settings", "-");
params.put("tags", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("copy_from", "-");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects');

const payload = JSON.stringify({"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":\"-\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects");
request.Content = new StringContent(
    @"{""name"":""-"",""description"":""-"",""project_type"":""-"",""owner"":{""zpuid"":""4000000002055""},""is_public_project"":""-"",""start_date"":""2023-12-20"",""end_date"":""2024-12-20"",""status"":{""id"":""4000000062001""},""layout"":{""id"":""4000000062001""},""added_via"":""-"",""is_rollup_project"":""-"",""budget_info"":{""billing_method"":""-"",""budget_type"":""-"",""tracking_method"":""-"",""currency"":""-"",""cost_budget"":{""amount"":""-""},""hourly_budget"":""-"",""rate_per_hour"":{""amount"":""-""},""budget_threshold"":{""amount"":""-""},""hourly_budget_threshold"":""-"",""fixed_cost"":{""amount"":""-""},""cost_per_hour"":{""amount"":""-""},""revenue_budget"":{""amount"":""-""}},""project_group"":{""id"":""4000000062001""},""sub_module_settings"":""-"",""tags"":[{""add"":[{""id"":""4000000062001""}],""remove"":[{""id"":""4000000062001""}],""id"":""4000000062001""}],""copy_from"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":\"-\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":\"-\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":\"-\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"-\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_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/projects");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":\"-\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":\"-\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"sub_module_settings\":\"-\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"copy_from\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"sub_module_settings":"-","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"copy_from":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "-", "description" : "-", "project_type" : "-", "owner" : { "zpuid" : "4000000002055" }, "is_public_project" : "-", "start_date" : "2023-12-20", "end_date" : "2024-12-20", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "added_via" : "-", "is_rollup_project" : "-", "budget_info" : { "billing_method" : "-", "budget_type" : "-", "tracking_method" : "-", "currency" : "-", "cost_budget" : { "amount" : "-" }, "hourly_budget" : "-", "rate_per_hour" : { "amount" : "-" }, "budget_threshold" : { "amount" : "-" }, "hourly_budget_threshold" : "-", "fixed_cost" : { "amount" : "-" }, "cost_per_hour" : { "amount" : "-" }, "revenue_budget" : { "amount" : "-" } }, "project_group" : { "id" : "4000000062001" }, "sub_module_settings" : "-", "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "copy_from" : "-" }

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" : 50000.0, "formatted_amount" : "$ 50000.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_hours" : "20:00", "bcy_forecasted_cost" : { "amount" : 50000.0, "formatted_amount" : "$ 50000.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "forecasted_hours" : "20:00", "remaining_hours" : "10:00", "actual_cost" : { "amount" : 50000.0, "formatted_amount" : "$ 50000.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "actual_hours" : "50:00", "bcy_planned_cost" : { "amount" : 50000.0, "formatted_amount" : "$ 50000.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "planned_cost" : { "amount" : 50000.0, "formatted_amount" : "$ 50000.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "budget_type" : "based_on_project", "bcy_actual_cost" : { "amount" : 50000.0, "formatted_amount" : "$ 50000.00", "currency_code" : "USD", "currency_id" : "7000000015018" }, "cost_budget" : { "amount" : "10000000", "formatted_amount" : "$ 1,00,00,000.00", "currency_code" : "USD", "currency_id" : "7000000015018" } }, "issues" : { "closed_count" : 10, "open_count" : 10 }, "is_completed" : "false", "id" : "7000000074003", "key" : "50", "tasks" : { "closed_count" : 10, "open_count" : 10 }, "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" : "Daniel", "last_name" : "Cooper", "first_name" : "Daniel", "zuid" : "25450833" }, "percent_complete" : "10", "tags" : [ { "id" : "7000000015084", "color_hexcode" : "#7dcf7b" } ], "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" : "Daniel", "last_name" : "Cooper", "first_name" : "Daniel", "zuid" : "25450833" }, "project_group" : { "name" : "zp.projset.ungroupproj", "id" : "7000000005369", "type" : "public" }, "milestones" : { "closed_count" : 10, "open_count" : 10 }, "status" : { "is_closed_type" : "false", "name" : "Active", "id" : "7000000000665" } }
Update 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,archived

JSONObject

Enter the project owner details.

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

completed_time

String

Enter the completed time of the project

JSONObject

max length : 1000

Enter the status information 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 tag details for the project.

color

String

Enter the color code of the project in hex format (for example: #FF5733).

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024";
params = Map();
params.put("name", "-");
params.put("description", "-");
params.put("project_type", "-");
params.put("owner", {"zpuid":"4000000002055"});
params.put("is_public_project", "-");
params.put("start_date", "2023-12-20");
params.put("end_date", "2024-12-20");
params.put("completed_time", "-");
params.put("status", {"id":"4000000062001"});
params.put("layout", {"id":"4000000062001"});
params.put("added_via", "-");
params.put("is_rollup_project", "-");
params.put("budget_info", {"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}});
params.put("project_group", {"id":"4000000062001"});
params.put("tags", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("color", "-");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024');

const payload = JSON.stringify({"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"completed_time\":\"-\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");
request.Content = new StringContent(
    @"{""name"":""-"",""description"":""-"",""project_type"":""-"",""owner"":{""zpuid"":""4000000002055""},""is_public_project"":""-"",""start_date"":""2023-12-20"",""end_date"":""2024-12-20"",""completed_time"":""-"",""status"":{""id"":""4000000062001""},""layout"":{""id"":""4000000062001""},""added_via"":""-"",""is_rollup_project"":""-"",""budget_info"":{""billing_method"":""-"",""budget_type"":""-"",""tracking_method"":""-"",""currency"":""-"",""cost_budget"":{""amount"":""-""},""hourly_budget"":""-"",""rate_per_hour"":{""amount"":""-""},""budget_threshold"":{""amount"":""-""},""hourly_budget_threshold"":""-"",""fixed_cost"":{""amount"":""-""},""cost_per_hour"":{""amount"":""-""},""revenue_budget"":{""amount"":""-""}},""project_group"":{""id"":""4000000062001""},""tags"":[{""add"":[{""id"":""4000000062001""}],""remove"":[{""id"":""4000000062001""}],""id"":""4000000062001""}],""color"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"completed_time\":\"-\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"completed_time\":\"-\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"completed_time\":\"-\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"-\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"completed_time\":\"-\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"completed_time\":\"-\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"-\",\"description\":\"-\",\"project_type\":\"-\",\"owner\":{\"zpuid\":\"4000000002055\"},\"is_public_project\":\"-\",\"start_date\":\"2023-12-20\",\"end_date\":\"2024-12-20\",\"completed_time\":\"-\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"added_via\":\"-\",\"is_rollup_project\":\"-\",\"budget_info\":{\"billing_method\":\"-\",\"budget_type\":\"-\",\"tracking_method\":\"-\",\"currency\":\"-\",\"cost_budget\":{\"amount\":\"-\"},\"hourly_budget\":\"-\",\"rate_per_hour\":{\"amount\":\"-\"},\"budget_threshold\":{\"amount\":\"-\"},\"hourly_budget_threshold\":\"-\",\"fixed_cost\":{\"amount\":\"-\"},\"cost_per_hour\":{\"amount\":\"-\"},\"revenue_budget\":{\"amount\":\"-\"}},\"project_group\":{\"id\":\"4000000062001\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"-","description":"-","project_type":"-","owner":{"zpuid":"4000000002055"},"is_public_project":"-","start_date":"2023-12-20","end_date":"2024-12-20","completed_time":"-","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"added_via":"-","is_rollup_project":"-","budget_info":{"billing_method":"-","budget_type":"-","tracking_method":"-","currency":"-","cost_budget":{"amount":"-"},"hourly_budget":"-","rate_per_hour":{"amount":"-"},"budget_threshold":{"amount":"-"},"hourly_budget_threshold":"-","fixed_cost":{"amount":"-"},"cost_per_hour":{"amount":"-"},"revenue_budget":{"amount":"-"}},"project_group":{"id":"4000000062001"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "-", "description" : "-", "project_type" : "-", "owner" : { "zpuid" : "4000000002055" }, "is_public_project" : "-", "start_date" : "2023-12-20", "end_date" : "2024-12-20", "completed_time" : "-", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "added_via" : "-", "is_rollup_project" : "-", "budget_info" : { "billing_method" : "-", "budget_type" : "-", "tracking_method" : "-", "currency" : "-", "cost_budget" : { "amount" : "-" }, "hourly_budget" : "-", "rate_per_hour" : { "amount" : "-" }, "budget_threshold" : { "amount" : "-" }, "hourly_budget_threshold" : "-", "fixed_cost" : { "amount" : "-" }, "cost_per_hour" : { "amount" : "-" }, "revenue_budget" : { "amount" : "-" } }, "project_group" : { "id" : "4000000062001" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "color" : "-" }

Sample Response

200{ "id" : "7000000278041", "key" : "174", "name" : "test", "project_type" : "active", "description" : "

", "owner" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Daniel", "email" : "daniel.cooper@zylker.com", "first_name" : "Daniel", "last_name" : "Cooper", "full_name" : "Daniel C" }, "is_public_project" : false, "start_date" : "2025-11-09", "end_date" : "2025-11-30", "completed_time" : "2025-12-30T18:30:00.000Z", "is_strict_project" : false, "created_time" : "2025-09-29T08:06:34.118Z", "created_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Daniel", "email" : "daniel.cooper@zylker.com", "first_name" : "Daniel", "last_name" : "Cooper", "full_name" : "Daniel C" }, "modified_time" : "2026-02-09T08:31:55.342Z", "updated_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Daniel", "email" : "daniel.cooper@zylker.com", "first_name" : "Daniel", "last_name" : "Cooper", "full_name" : "Daniel C" }, "status" : { "id" : "7000000000665", "name" : "Active", "color" : "transparent", "color_hexcode" : "transparent", "is_closed_type" : false }, "layout" : { "id" : "7000000000506", "name" : "Standard Layout", "is_default" : true, "type" : "public" }, "business_hours_id" : "7000000197013", "is_rollup_project" : false, "budget_info" : { "billing_method" : "staff_hours", "budget_type" : "none", "currency" : "USD", "cost_budget" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "hourly_budget" : "30:00", "rate_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "cost_budget_threshold" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "hourly_budget_threshold" : "20:00", "fixed_cost" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "tracking_method" : "project_hours", "cost_per_hour" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "revenue_budget" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "planned_cost" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "actual_cost" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "forecasted_cost" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "planned_hours" : "50:00", "actual_hours" : "40:00", "remaining_hours" : "10:00", "forecasted_hours" : "20:00", "planned_value" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "earned_value" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "schedule_variance" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "cost_variance" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "bcy_planned_cost" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "bcy_actual_cost" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "bcy_forecasted_cost" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "bcy_planned_value" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "bcy_earned_value" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "planned_revenue" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "actual_revenue" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 }, "forecasted_revenue" : { "currency_code" : "USD", "formatted_amount" : "$ 50000.00", "amount" : 50000.0 } }, "project_group" : { "id" : "7000000005369", "name" : "zp.projset.ungroupproj", "type" : "public" }, "percent_complete" : 0, "tasks" : { "open_count" : 10, "closed_count" : 20 }, "issues" : { "open_count" : 10, "closed_count" : 20 }, "milestones" : { "open_count" : 10, "closed_count" : 20 }, "is_completed" : false, "date_std_lay_proj" : "2025-11-15", "single_line_test_1446" : "www.zoho.com", "check_box_sample_11sep" : false, "is_equal_no_of_unit_and_cost_formula" : false, "check_box_19sep_cview_lay" : false }
Trash Project

Move a project to the recycle bin.

POST

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

OAuth Scope:

ZohoProjects.projects.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/trash")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Restore Project

Restore a project from the recycle bin.

POST

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

OAuth Scope:

ZohoProjects.projects.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/restore")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Delete Project

Remove a project from the recycle bin permanently.

DELETE

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

OAuth Scope:

ZohoProjects.projects.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markanchored")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
Update Favorite View

Mark or unmark a custom view as a favorite in a project.

POST

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

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/customview/1752587000000097269/markfavourite")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
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. Use this API to list comments with pagination support.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments?page=%s&per_page=%s&sort_by=%s", enc_page, enc_per_page, enc_sort_by);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments?page=%@&per_page=%@&sort_by=%@", encodedPage, encodedPer_page, encodedSort_by];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_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 Comment Details

Retrieve details of a specific comment in a project.

GET

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

OAuth Scope:

ZohoProjects.projects.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Blake Wilson", "name" : "Blake", "last_name" : "Wilson", "id" : "22308233", "is_client_user" : "false", "first_name" : "Blake", "email" : "blake.wilson@zylker.com" }, "id" : "5000000114001", "content" : "
dfghbjnhh
" }
Add Comment

Add a comment to a project. Use this API to associate attachments if required.

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

attachment_ids

JSONArray

Specify the attachment IDs.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Sample content","attachment_ids":"[12345678987654321]"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments";
params = Map();
params.put("content", "Sample content");
params.put("attachment_ids", "[12345678987654321]");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments');

const payload = JSON.stringify({"content":"Sample content","attachment_ids":"[12345678987654321]"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Sample content","attachment_ids":"[12345678987654321]"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"content":"Sample content","attachment_ids":"[12345678987654321]"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Sample content","attachment_ids":"[12345678987654321]"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments");
request.Content = new StringContent(
    @"{""content"":""Sample content"",""attachment_ids"":""[12345678987654321]""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"Sample content","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/projects/1752587000000097024/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Sample content","attachment_ids":"[12345678987654321]"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Sample content","attachment_ids":"[12345678987654321]"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Sample content","attachment_ids":"[12345678987654321]"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Sample content","attachment_ids":"[12345678987654321]"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Sample content","attachment_ids":"[12345678987654321]"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Sample content","attachment_ids":"[12345678987654321]"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "Sample content", "attachment_ids" : "[12345678987654321]" }

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" : "Leo Fisher", "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 an existing comment. Use this API to modify content or replace attachments.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Sample content","attachment_ids":"[12345678987654321]"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046";
params = Map();
params.put("content", "Sample content");
params.put("attachment_ids", "[12345678987654321]");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046');

const payload = JSON.stringify({"content":"Sample content","attachment_ids":"[12345678987654321]"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Sample content","attachment_ids":"[12345678987654321]"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"content":"Sample content","attachment_ids":"[12345678987654321]"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Sample content","attachment_ids":"[12345678987654321]"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""content"":""Sample content"",""attachment_ids"":""[12345678987654321]""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"Sample content","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/projects/1752587000000097024/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Sample content","attachment_ids":"[12345678987654321]"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Sample content","attachment_ids":"[12345678987654321]"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Sample content","attachment_ids":"[12345678987654321]"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Sample content","attachment_ids":"[12345678987654321]"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Sample content","attachment_ids":"[12345678987654321]"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Sample content\",\"attachment_ids\":\"[12345678987654321]\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Sample content","attachment_ids":"[12345678987654321]"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "Sample content", "attachment_ids" : "[12345678987654321]" }

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" : "Leo Fisher", "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 permanently.

DELETE

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

OAuth Scope:

ZohoProjects.projects.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Possible Errors

FORBIDDEN HTTP 403

Project Group

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

Get All Project Groups

Retrieve all project groups from the Zoho Projects portal.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 } ] }
Get User's Project Groups

Retrieve project groups associated with a user.

GET

/api/v3/portal/[PORTALID]/my-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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/my-project-groups");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/my-project-groups")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "project-groups" : [ { "name" : "Ungrouped Projects", "id" : "4000000005417" } ] }
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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups";
params = Map();
params.put("name", "Marketing");
params.put("type", "public");
params.put("prefix", "MK-01");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups');

const payload = JSON.stringify({"name":"Marketing","type":"public","prefix":"MK-01"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Marketing","type":"public","prefix":"MK-01"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Marketing","type":"public","prefix":"MK-01"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Marketing","type":"public","prefix":"MK-01"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups");
request.Content = new StringContent(
    @"{""name"":""Marketing"",""type"":""public"",""prefix"":""MK-01""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Marketing","type":"public","prefix":"MK-01"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Marketing","type":"public","prefix":"MK-01"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Marketing","type":"public","prefix":"MK-01"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Marketing","type":"public","prefix":"MK-01"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Marketing","type":"public","prefix":"MK-01"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Marketing","type":"public","prefix":"MK-01"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Robert Clarke", "email" : "robert.clarke@zylker.com", "is_client_user" : false, "first_name" : "Robert", "last_name" : "Clarke", "full_name" : "Robert Clarke" }, "created_on" : "2025-02-24T13:11:45.737Z", "updated_by" : { "id" : "15755944", "zpuid" : "4000000000987", "name" : "Robert Clarke", "email" : "robert.clarke@zylker.com", "is_client_user" : false, "first_name" : "Robert", "last_name" : "Clarke", "full_name" : "Robert Clarke" }, "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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]";
params = Map();
params.put("name", "Marketing");
params.put("type", "public");
params.put("prefix", "MK-01");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]');

const payload = JSON.stringify({"name":"Marketing","type":"public","prefix":"MK-01"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Marketing","type":"public","prefix":"MK-01"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"Marketing","type":"public","prefix":"MK-01"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Marketing","type":"public","prefix":"MK-01"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]");
request.Content = new StringContent(
    @"{""name"":""Marketing"",""type"":""public"",""prefix"":""MK-01""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Marketing","type":"public","prefix":"MK-01"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Marketing","type":"public","prefix":"MK-01"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Marketing","type":"public","prefix":"MK-01"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Marketing","type":"public","prefix":"MK-01"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Marketing","type":"public","prefix":"MK-01"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Marketing\",\"type\":\"public\",\"prefix\":\"MK-01\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Marketing","type":"public","prefix":"MK-01"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Robert Clarke", "email" : "robert.clarke@zylker.com", "is_client_user" : false, "first_name" : "Robert", "last_name" : "Clarke", "full_name" : "Robert Clarke" }, "created_on" : "2025-02-24T13:11:45.737Z", "updated_by" : { "id" : "15755944", "zpuid" : "4000000000987", "name" : "Robert Clarke", "email" : "robert.clarke@zylker.com", "is_client_user" : false, "first_name" : "Robert", "last_name" : "Clarke", "full_name" : "Robert Clarke" }, "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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/project-groups/[PROJECT-GROUPID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Zoho Projects 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 to retrieve.

per_page

int

Enter the number of records to be displayed per page.

sort_by

String

Specify the sort criteria. Accepted values: start_date, end_date, created_time, last_modified_time, sequence

view_id

long

Enter the ID of the custom view.

milestone_ids

String

Enter the phase IDs to retrieve.

JSONObject

Enter the filter criteria to retrieve specific phases.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/phases?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=23806000097545166&milestone_ids=139655000000057003%2C139655000000057004%2C139655000000057005&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22phase_name%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/phases";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_id", "23806000097545166");
params.put("milestone_ids", "139655000000057003,139655000000057004,139655000000057005");
params.put("filter", {"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/phases');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_id', '23806000097545166');
url.searchParams.append('milestone_ids', '139655000000057003,139655000000057004,139655000000057005');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/phases")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)",
  "view_id" => "23806000097545166",
  "milestone_ids" => "139655000000057003,139655000000057004,139655000000057005",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '23806000097545166',
    'milestone_ids' => '139655000000057003,139655000000057004,139655000000057005',
    '"filter"' => '{"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/phases" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/phases"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)",
    "view_id": "23806000097545166",
    "milestone_ids": "139655000000057003,139655000000057004,139655000000057005",
    ""filter"": "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "23806000097545166", 0);
        char *enc_milestone_ids = curl_easy_escape(curl, "139655000000057003,139655000000057004,139655000000057005", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/phases?page=%s&per_page=%s&sort_by=%s&view_id=%s&milestone_ids=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_view_id, enc_milestone_ids, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_milestone_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "23806000097545166";
query["milestone_ids"] = "139655000000057003,139655000000057004,139655000000057005";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/phases") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "23806000097545166", 0);
        char* enc_milestone_ids = curl_easy_escape(curl, "139655000000057003,139655000000057004,139655000000057005", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/phases";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&milestone_ids=" + std::string(enc_milestone_ids);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_milestone_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
      enc-milestone_ids (java.net.URLEncoder/encode "139655000000057003,139655000000057004,139655000000057005" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/phases" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&view_id=" enc-view_id "&milestone_ids=" enc-milestone_ids "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/phases", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_id", "23806000097545166")
    q.Add("milestone_ids", "139655000000057003,139655000000057004,139655000000057005")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/phases?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=23806000097545166&milestone_ids=139655000000057003%2C139655000000057004%2C139655000000057005&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22phase_name%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_id", "23806000097545166");
uriBuilder.addParameter("milestone_ids", "139655000000057003,139655000000057004,139655000000057005");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/phases';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)',
  'view_id': '23806000097545166',
  'milestone_ids': '139655000000057003,139655000000057004,139655000000057005',
  '"filter"': '{"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
view_id = "23806000097545166"
milestone_ids = "139655000000057003,139655000000057004,139655000000057005"
"filter" = {"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/phases".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_id", "23806000097545166")
    urlBuilder.addQueryParameter("milestone_ids", "139655000000057003,139655000000057004,139655000000057005")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedMilestone_ids = [@"139655000000057003,139655000000057004,139655000000057005" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/phases?page=%@&per_page=%@&sort_by=%@&view_id=%@&milestone_ids=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encodedView_id, encodedMilestone_ids, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "23806000097545166" in
  let enc_milestone_ids = Uri.pct_encode "139655000000057003,139655000000057004,139655000000057005" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/phases" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id ^ "&milestone_ids=" ^ enc_milestone_ids ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
    view_id = "23806000097545166"
    milestone_ids = "139655000000057003,139655000000057004,139655000000057005"
    "filter" = "{`"criteria`":[{`"cfid`":`"23806000091055001`",`"api_name`":`"phase_name`",`"field_name`":`"status`",`"criteria_condition`":`"is`",`"value`":[`"23806000097533111`"],`"relative_columns`":[{`"cfid`":`"23806000091055001`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/phases" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/phases"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)",
  view_id = "23806000097545166",
  milestone_ids = "139655000000057003,139655000000057004,139655000000057005",
  "filter" = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/phases")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_id", value: "23806000097545166"),
    URLQueryItem(name: "milestone_ids", value: "139655000000057003,139655000000057004,139655000000057005"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_time)" view_id : "23806000097545166" milestone_ids : "139655000000057003,139655000000057004,139655000000057005" "filter" : { "criteria" : [ { "cfid" : "23806000091055001", "api_name" : "phase_name", "field_name" : "status", "criteria_condition" : "is", "value" : [ "23806000097533111" ], "relative_columns" : [ { "cfid" : "23806000091055001", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" }

Sample Response

200{ "page_info" : [ { "per_page" : 100, "page" : 1 } ], "milestones" : [ { "end_date" : "2025-12-12T06:57:56.424Z", "owner" : { "zpuid" : "32000000002471", "last_name" : "Hemsworth", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Authentication Module Security Audit ? Final 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. Use this API to fetch phase list using filters, sorting, and pagination.

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

Specify the sort criteria. Accepted values: start_date, end_date, created_time, last_modified_time, sequence.

view_id

long

Enter the ID of the custom view.

milestone_ids

String

Enter the phase IDs to retrieve specific records.

JSONObject

Enter the filter criteria to retrieve specific phases.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=23806000097545166&milestone_ids=139655000000057003%2C139655000000057004%2C139655000000057005&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22phase_name%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_id", "23806000097545166");
params.put("milestone_ids", "139655000000057003,139655000000057004,139655000000057005");
params.put("filter", {"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_id', '23806000097545166');
url.searchParams.append('milestone_ids', '139655000000057003,139655000000057004,139655000000057005');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)",
  "view_id" => "23806000097545166",
  "milestone_ids" => "139655000000057003,139655000000057004,139655000000057005",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '23806000097545166',
    'milestone_ids' => '139655000000057003,139655000000057004,139655000000057005',
    '"filter"' => '{"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)",
    "view_id": "23806000097545166",
    "milestone_ids": "139655000000057003,139655000000057004,139655000000057005",
    ""filter"": "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "23806000097545166", 0);
        char *enc_milestone_ids = curl_easy_escape(curl, "139655000000057003,139655000000057004,139655000000057005", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases?page=%s&per_page=%s&sort_by=%s&view_id=%s&milestone_ids=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_view_id, enc_milestone_ids, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_milestone_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "23806000097545166";
query["milestone_ids"] = "139655000000057003,139655000000057004,139655000000057005";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "23806000097545166", 0);
        char* enc_milestone_ids = curl_easy_escape(curl, "139655000000057003,139655000000057004,139655000000057005", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&milestone_ids=" + std::string(enc_milestone_ids);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_milestone_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
      enc-milestone_ids (java.net.URLEncoder/encode "139655000000057003,139655000000057004,139655000000057005" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&view_id=" enc-view_id "&milestone_ids=" enc-milestone_ids "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_id", "23806000097545166")
    q.Add("milestone_ids", "139655000000057003,139655000000057004,139655000000057005")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=23806000097545166&milestone_ids=139655000000057003%2C139655000000057004%2C139655000000057005&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22phase_name%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_id", "23806000097545166");
uriBuilder.addParameter("milestone_ids", "139655000000057003,139655000000057004,139655000000057005");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)',
  'view_id': '23806000097545166',
  'milestone_ids': '139655000000057003,139655000000057004,139655000000057005',
  '"filter"': '{"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
view_id = "23806000097545166"
milestone_ids = "139655000000057003,139655000000057004,139655000000057005"
"filter" = {"criteria":[{"cfid":"23806000091055001","api_name":"phase_name","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_id", "23806000097545166")
    urlBuilder.addQueryParameter("milestone_ids", "139655000000057003,139655000000057004,139655000000057005")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedMilestone_ids = [@"139655000000057003,139655000000057004,139655000000057005" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases?page=%@&per_page=%@&sort_by=%@&view_id=%@&milestone_ids=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encodedView_id, encodedMilestone_ids, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "23806000097545166" in
  let enc_milestone_ids = Uri.pct_encode "139655000000057003,139655000000057004,139655000000057005" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id ^ "&milestone_ids=" ^ enc_milestone_ids ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
    view_id = "23806000097545166"
    milestone_ids = "139655000000057003,139655000000057004,139655000000057005"
    "filter" = "{`"criteria`":[{`"cfid`":`"23806000091055001`",`"api_name`":`"phase_name`",`"field_name`":`"status`",`"criteria_condition`":`"is`",`"value`":[`"23806000097533111`"],`"relative_columns`":[{`"cfid`":`"23806000091055001`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)",
  view_id = "23806000097545166",
  milestone_ids = "139655000000057003,139655000000057004,139655000000057005",
  "filter" = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_id", value: "23806000097545166"),
    URLQueryItem(name: "milestone_ids", value: "139655000000057003,139655000000057004,139655000000057005"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"phase_name\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_time)" view_id : "23806000097545166" milestone_ids : "139655000000057003,139655000000057004,139655000000057005" "filter" : { "criteria" : [ { "cfid" : "23806000091055001", "api_name" : "phase_name", "field_name" : "status", "criteria_condition" : "is", "value" : [ "23806000097533111" ], "relative_columns" : [ { "cfid" : "23806000091055001", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" }

Sample Response

200{ "page_info" : [ { "per_page" : 100, "page" : 1 } ], "milestones" : [ { "end_date" : "2025-12-12T06:57:56.424Z", "owner" : { "zpuid" : "32000000002471", "last_name" : "Hemsworth", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Authentication Module Security Audit ? Final 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 Details

Retrieve details of a specific phase. Use this API to fetch complete phase information using the phase ID.

GET

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

OAuth Scope:

ZohoProjects.milestones.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "end_date" : "2025-02-24T00:00:00.000Z", "owner" : { "zpuid" : "32000000004929", "full_name" : "Monica Hemsworth", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "73746290", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "created_time" : "2025-02-24T04:00:07.063Z", "updated_time" : "2025-02-24T04:00:07.063Z", "flag" : "internal", "addedby" : { "zpuid" : "32000000002471", "full_name" : "Monica Hemsworth", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "27701230", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Authentication Module Security Audit", "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" : "#2cc8ba", "defaultValue" : true, "statusName" : "Active", "closed" : false, "layoutId" : "32000000005633" } }
Create Phase

Create a new phase in a project. Use this API to define phase details such as name, dates, owner, status, and budget.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases";
params = Map();
params.put("name", "Authentication Module Security Audit");
params.put("start_date", "05/28/2025");
params.put("end_date", "10/28/2025");
params.put("owner_zpuid", "1752587000000097024");
params.put("flag", "internal");
params.put("project_id", "23806000097545166");
params.put("status_id", "238060000975451234");
params.put("tagIds", "238060000975451234,238060000975451234");
params.put("next", "23806000097545224");
params.put("previous", "23806000097545222");
params.put("budget", "98420000");
params.put("threshold", "250000");
params.put("hourly_budget", "9895000");
params.put("hourly_budget_threshold", "250000");
params.put("revenue_budget", "1023000");
params.put("udf_char[0-9]{1,3}", "Critical security vulnerability identified in the user authentication module affecting session token integrity.");
params.put("udf_text[0-9]{1,2}", "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.");
params.put("udf_long[0-9]{1,2}", "123987542233");
params.put("udf_user[0-9]{1,2}", "139655000000057003");
params.put("udf_double[0-9]{1,2}", "123.445");
params.put("udf_date[0-9]{1,2}", "23/09/2024");
params.put("udf_encrypt([1-9]|10)", "Mh@2024#SecAudit");
params.put("udf_multi[0-9]{1,2}", ["issue","bug","security","needfix"]);
params.put("udf_multiuser[0-9]{1,2}", ["139655000000057003","139655000000057004","139655000000057005"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases');

const payload = JSON.stringify({"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases");
request.Content = new StringContent(
    @"{""name"":""Authentication Module Security Audit"",""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}"":""Critical security vulnerability identified in the user authentication module affecting session token integrity."",""udf_text[0-9]{1,2}"":""The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches."",""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)"":""Mh@2024#SecAudit"",""udf_multi[0-9]{1,2}"":[""issue"",""bug"",""security"",""needfix""],""udf_multiuser[0-9]{1,2}"":[""139655000000057003"",""139655000000057004"",""139655000000057005""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Authentication Module Security Audit", "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}" : "Critical security vulnerability identified in the user authentication module affecting session token integrity.", "udf_text[0-9]{1,2}" : "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.", "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)" : "Mh@2024#SecAudit", "udf_multi[0-9]{1,2}" : [ "issue", "bug", "security", "needfix" ], "udf_multiuser[0-9]{1,2}" : [ "139655000000057003", "139655000000057004", "139655000000057005" ] }

Sample Response

201{ "owner" : { "name" : "Monica Hemsworth", "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" : "Initiate Authentication Bypass Issue for Security Review", "project" : { "name" : "Construction", "id" : "32000000005537" }, "id" : "32000000132001", "status" : { "name" : "Active", "id" : "32000000000890" }, "start_date" : "2025-02-23T17:30:00.000Z" }
Update Phase

Modify the details of 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 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 phase owner.

flag

String

Specify the flag type for the phase. Accepted values: Internal or External.

status_id

long

Enter the status ID for the phase.

tagIds

String

max length : 1000

Enter the tag IDs to associate with the phase.

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 character-type custom field values.

udf_text[0-9]{1,2}

String

max length : 1000

Enter text-type custom field values.

udf_long[0-9]{1,2}

long

max length : 19

Enter integer-type custom field values.

udf_user[0-9]{1,2}

long

max length : 19

Enter user-type custom field values using ZPUID.

udf_double[0-9]{1,2}

double

Enter double-type custom field values.

udf_date[0-9]{1,2}

String

Enter date-type custom field values.

udf_encrypt([1-9]|10)

String

max length : 1000

Enter encrypted custom field values.

udf_multi[0-9]{1,2}

JSONArray

array size : 0-20

Enter multi-select custom field values.

udf_multiuser[0-9]{1,2}

JSONArray

array size : 0-20

Enter multiple user ZPUIDs for multi-user fields.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]";
params = Map();
params.put("name", "Authentication Module Security Audit");
params.put("start_date", "05/28/2025");
params.put("end_date", "10/28/2025");
params.put("owner_zpuid", "1752587000000097024");
params.put("flag", "internal");
params.put("status_id", "238060000975451234");
params.put("tagIds", "238060000975451234,238060000975451234");
params.put("budget", "98420000");
params.put("threshold", "250000");
params.put("hourly_budget", "9895000");
params.put("hourly_budget_threshold", "250000");
params.put("revenue_budget", "1023000");
params.put("udf_char[0-9]{1,3}", "Critical security vulnerability identified in the user authentication module affecting session token integrity.");
params.put("udf_text[0-9]{1,2}", "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.");
params.put("udf_long[0-9]{1,2}", "123987542233");
params.put("udf_user[0-9]{1,2}", "139655000000057003");
params.put("udf_double[0-9]{1,2}", "123.445");
params.put("udf_date[0-9]{1,2}", "23/09/2024");
params.put("udf_encrypt([1-9]|10)", "Mh@2024#SecAudit");
params.put("udf_multi[0-9]{1,2}", ["issue","bug","security","needfix"]);
params.put("udf_multiuser[0-9]{1,2}", ["139655000000057003","139655000000057004","139655000000057005"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]');

const payload = JSON.stringify({"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");
request.Content = new StringContent(
    @"{""name"":""Authentication Module Security Audit"",""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}"":""Critical security vulnerability identified in the user authentication module affecting session token integrity."",""udf_text[0-9]{1,2}"":""The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches."",""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)"":""Mh@2024#SecAudit"",""udf_multi[0-9]{1,2}"":[""issue"",""bug"",""security"",""needfix""],""udf_multiuser[0-9]{1,2}"":[""139655000000057003"",""139655000000057004"",""139655000000057005""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Authentication Module Security Audit\",\"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}\":\"Critical security vulnerability identified in the user authentication module affecting session token integrity.\",\"udf_text[0-9]{1,2}\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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)\":\"Mh@2024#SecAudit\",\"udf_multi[0-9]{1,2}\":[\"issue\",\"bug\",\"security\",\"needfix\"],\"udf_multiuser[0-9]{1,2}\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Authentication Module Security Audit","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}":"Critical security vulnerability identified in the user authentication module affecting session token integrity.","udf_text[0-9]{1,2}":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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)":"Mh@2024#SecAudit","udf_multi[0-9]{1,2}":["issue","bug","security","needfix"],"udf_multiuser[0-9]{1,2}":["139655000000057003","139655000000057004","139655000000057005"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Authentication Module Security Audit", "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}" : "Critical security vulnerability identified in the user authentication module affecting session token integrity.", "udf_text[0-9]{1,2}" : "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.", "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)" : "Mh@2024#SecAudit", "udf_multi[0-9]{1,2}" : [ "issue", "bug", "security", "needfix" ], "udf_multiuser[0-9]{1,2}" : [ "139655000000057003", "139655000000057004", "139655000000057005" ] }

Sample Response

201{ "owner" : { "name" : "Monica Hemsworth", "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 Authentication Module Security Audit 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Move Phase

Move a phase from one project to another.

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 be moved.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move";
params = Map();
params.put("to_project", "23806000097545166");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move');

const payload = JSON.stringify({"to_project":"23806000097545166"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"to_project":"23806000097545166"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"to_project":"23806000097545166"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"to_project":"23806000097545166"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project\":\"23806000097545166\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move");
request.Content = new StringContent(
    @"{""to_project"":""23806000097545166""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project\":\"23806000097545166\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"to_project\":\"23806000097545166\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"to_project\":\"23806000097545166\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"to_project\":\"23806000097545166\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"to_project":"23806000097545166"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"to_project":"23806000097545166"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"to_project":"23806000097545166"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"to_project\":\"23806000097545166\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"to_project":"23806000097545166"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"to_project":"23806000097545166"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"to_project\":\"23806000097545166\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/move")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"to_project":"23806000097545166"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

Sample Response

204 No Content
Clone Phase

Clone a phase within a project. Use this API to duplicate phase details and configuration.

POST

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

OAuth Scope:

ZohoProjects.milestones.CREATE

Parameter

Param Name
Data Type
Description
to_project_id

long

required

Enter the ID of the destination project where the phase will be cloned.

to_milestone_id

long

required

Enter the ID of the destination phase.

start_date

String

Enter the start date for the cloned phase.

include_closed_tasks_as_open

boolean

Specify whether closed tasks from the source phase should be included as open tasks in the cloned phase. Accepted values: true or false.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone";
params = Map();
params.put("to_project_id", "-");
params.put("to_milestone_id", "-");
params.put("start_date", "05/28/2025");
params.put("include_closed_tasks_as_open", "-");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone');

const payload = JSON.stringify({"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project_id\":\"-\",\"to_milestone_id\":\"-\",\"start_date\":\"05/28/2025\",\"include_closed_tasks_as_open\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone");
request.Content = new StringContent(
    @"{""to_project_id"":""-"",""to_milestone_id"":""-"",""start_date"":""05/28/2025"",""include_closed_tasks_as_open"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project_id\":\"-\",\"to_milestone_id\":\"-\",\"start_date\":\"05/28/2025\",\"include_closed_tasks_as_open\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"to_project_id\":\"-\",\"to_milestone_id\":\"-\",\"start_date\":\"05/28/2025\",\"include_closed_tasks_as_open\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"to_project_id\":\"-\",\"to_milestone_id\":\"-\",\"start_date\":\"05/28/2025\",\"include_closed_tasks_as_open\":\"-\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"to_project_id\":\"-\",\"to_milestone_id\":\"-\",\"start_date\":\"05\/28\/2025\",\"include_closed_tasks_as_open\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"to_project_id\":\"-\",\"to_milestone_id\":\"-\",\"start_date\":\"05/28/2025\",\"include_closed_tasks_as_open\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"to_project_id\":\"-\",\"to_milestone_id\":\"-\",\"start_date\":\"05/28/2025\",\"include_closed_tasks_as_open\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/clone")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"to_project_id":"-","to_milestone_id":"-","start_date":"05/28/2025","include_closed_tasks_as_open":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "to_project_id" : "-", "to_milestone_id" : "-", "start_date" : "05/28/2025", "include_closed_tasks_as_open" : "-" }

Sample Response

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

Retrieve 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 records to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/activities")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/status-timeline")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200[ { "updated_status" : { "color" : "#2cc8ba", "name" : "Active", "id" : "32000000000890", "is_closed" : false }, "updated_on" : "2025-02-24T09:56:25.314Z", "updated_by" : { "zpuid" : "32000000002471", "id" : "27701230", "display_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/followers")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

"200"{ "followers" : [ { "zpuid" : "139655000000057003", "name" : "Monica", "first_name" : "Monica", "last_name" : "Hemsworth", "zuid" : "73746290", "email" : "monica.hemsworth@zylker.com" }, { "zpuid" : "139655000000098765", "name" : "Monica", "first_name" : "Monica", "last_name" : "Hemsworth", "zuid" : "12345678", "email" : "monica.hemsworth@zylker.com" } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "page" : 1 } }
Add Followers

Add followers to a 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 ZPUIDs of users to follow the phase.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow";
params = Map();
params.put("followers", ["32000000002471"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow');

const payload = JSON.stringify({"followers":["32000000002471"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"followers":["32000000002471"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"followers":["32000000002471"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"followers":["32000000002471"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"followers\":[\"32000000002471\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow");
request.Content = new StringContent(
    @"{""followers"":[""32000000002471""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"followers\":[\"32000000002471\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"followers\":[\"32000000002471\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"followers\":[\"32000000002471\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"followers\":[\"32000000002471\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"followers":["32000000002471"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"followers":["32000000002471"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"followers":["32000000002471"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"followers\":[\"32000000002471\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"followers":["32000000002471"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"followers":["32000000002471"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"followers\":[\"32000000002471\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/follow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"followers":["32000000002471"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

Sample Response

200{ "followers" : [ { "zpuid" : "32000000002471", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow";
params = Map();
params.put("followers", ["32000000002471"]);
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow');

const payload = JSON.stringify({"followers":["32000000002471"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"followers":["32000000002471"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => '{"followers":["32000000002471"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"followers":["32000000002471"]}'

response = requests.delete(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"followers\":[\"32000000002471\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow");
request.Content = new StringContent(
    @"{""followers"":[""32000000002471""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"followers\":[\"32000000002471\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"followers\":[\"32000000002471\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"followers\":[\"32000000002471\"]}")
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"followers":["32000000002471"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"followers":["32000000002471"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"followers":["32000000002471"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"followers\":[\"32000000002471\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"followers":["32000000002471"]}|json} in
  Lwt_main.run (
    Client.delete ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"followers":["32000000002471"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow" -Method DELETE -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"followers\":[\"32000000002471\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/unfollow")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"followers":["32000000002471"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Retrieve comments associated with 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

Specify the sort order of comments. Accepted values: ascending or descending.

page

int

Enter the page number to retrieve.

per_page

int

Enter the number of comments to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments";
params = Map();
params.put("sort_order", "descending");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments');
url.searchParams.append('sort_order', 'descending');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments")
params = {
  "sort_order" => "descending",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'sort_order' => 'descending',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments"

params = {
    "sort_order": "descending",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_sort_order = curl_easy_escape(curl, "descending", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments?sort_order=%s&page=%s&per_page=%s", enc_sort_order, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_sort_order);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["sort_order"] = "descending";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_sort_order = curl_easy_escape(curl, "descending", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments";
        url += "?sort_order=" + std::string(enc_sort_order);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_sort_order);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-sort_order (java.net.URLEncoder/encode "descending" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments" "?sort_order=" enc-sort_order "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments", nil)
    q := req.URL.Query()
    q.Add("sort_order", "descending")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments?sort_order=descending&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/comments");
uriBuilder.addParameter("sort_order", "descending");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments';

const params = new URLSearchParams({
  'sort_order': 'descending',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
sort_order = "descending"
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("sort_order", "descending")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedSort_order = [@"descending" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments?sort_order=%@&page=%@&per_page=%@", encodedSort_order, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_sort_order = Uri.pct_encode "descending" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments" ^ "?sort_order=" ^ enc_sort_order ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    sort_order = "descending"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments"

params <- list(
  sort_order = "descending",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments")!
components.queryItems = [
    URLQueryItem(name: "sort_order", value: "descending"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "id" : "139655000000505194", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "content" : "
The milestone status has been reviewed and requires an update to reflect the current sprint progress. Please update accordingly.
" } ], "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 user ZPUIDs to notify.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs to associate. Attachments must be uploaded before use.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments";
params = Map();
params.put("content", "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.");
params.put("notify", "true");
params.put("attachment_ids", ["139655000000057003","139655000000057004","139655000000057005"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments');

const payload = JSON.stringify({"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments");
request.Content = new StringContent(
    @"{""content"":""The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off."",""notify"":""true"",""attachment_ids"":[""139655000000057003"",""139655000000057004"",""139655000000057005""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","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]/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "id" : "139655000000505194", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "content" : "
The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.
" }
Update Comment

Modify the existing 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 user ZPUIDs to notify.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the attachment IDs to associate. Attachments must be uploaded before use.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046";
params = Map();
params.put("content", "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.");
params.put("notify", "true");
params.put("attachment_ids", ["139655000000057003","139655000000057004","139655000000057005"]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046');

const payload = JSON.stringify({"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""content"":""The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off."",""notify"":""true"",""attachment_ids"":[""139655000000057003"",""139655000000057004"",""139655000000057005""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","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]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify\":\"true\",\"attachment_ids\":[\"139655000000057003\",\"139655000000057004\",\"139655000000057005\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify":"true","attachment_ids":["139655000000057003","139655000000057004","139655000000057005"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "id" : "139655000000505194", "last_modified_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "content" : "
The milestone comment has been updated to reflect the latest QA findings on the authentication module fix.
" }
Delete Comment

Remove a comment from a phase.

DELETE

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

OAuth Scope:

ZohoProjects.milestones.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/phases/[PHASEID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Issues

Retrieve all issues from the Zoho Projects portal.

GET

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

OAuth Scope:

ZohoProjects.bugs.READ

Query Parameter

Param Name
Data Type
Description
page

int

required

Enter the page number. Example: 1

per_page

int

required

Enter the number of issues to display per page.

sort_by

String

Enter the field and direction to sort results. Accepted values: created_time, due_date, modified_time.

view_id

long

Enter the ID of a custom view to apply its saved filters and column settings.

issue_ids

String

Enter the IDs of specific issues to retrieve. Separate multiple IDs with commas.

JSONObject

Specify filter criteria to narrow down the issues returned.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/issues?page=1&per_page=10&sort_by=ASC%28created_time%29&view_id=2380600567533251&issue_ids=23806000097533216&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(created_time)");
params.put("view_id", "2380600567533251");
params.put("issue_ids", "23806000097533216");
params.put("filter", {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/issues');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(created_time)');
url.searchParams.append('view_id', '2380600567533251');
url.searchParams.append('issue_ids', '23806000097533216');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/issues")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(created_time)",
  "view_id" => "2380600567533251",
  "issue_ids" => "23806000097533216",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(created_time)',
    'view_id' => '2380600567533251',
    'issue_ids' => '23806000097533216',
    '"filter"' => '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(created_time)",
    "view_id": "2380600567533251",
    "issue_ids": "23806000097533216",
    ""filter"": "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "2380600567533251", 0);
        char *enc_issue_ids = curl_easy_escape(curl, "23806000097533216", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/issues?page=%s&per_page=%s&sort_by=%s&view_id=%s&issue_ids=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_view_id, enc_issue_ids, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_issue_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(created_time)";
query["view_id"] = "2380600567533251";
query["issue_ids"] = "23806000097533216";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/issues") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "2380600567533251", 0);
        char* enc_issue_ids = curl_easy_escape(curl, "23806000097533216", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&issue_ids=" + std::string(enc_issue_ids);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_issue_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(created_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "2380600567533251" "UTF-8")
      enc-issue_ids (java.net.URLEncoder/encode "23806000097533216" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/issues" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&view_id=" enc-view_id "&issue_ids=" enc-issue_ids "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/issues", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(created_time)")
    q.Add("view_id", "2380600567533251")
    q.Add("issue_ids", "23806000097533216")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/issues?page=1&per_page=10&sort_by=ASC%28created_time%29&view_id=2380600567533251&issue_ids=23806000097533216&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(created_time)");
uriBuilder.addParameter("view_id", "2380600567533251");
uriBuilder.addParameter("issue_ids", "23806000097533216");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/issues';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(created_time)',
  'view_id': '2380600567533251',
  'issue_ids': '23806000097533216',
  '"filter"': '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(created_time)"
view_id = "2380600567533251"
issue_ids = "23806000097533216"
"filter" = {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(created_time)")
    urlBuilder.addQueryParameter("view_id", "2380600567533251")
    urlBuilder.addQueryParameter("issue_ids", "23806000097533216")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(created_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"2380600567533251" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIssue_ids = [@"23806000097533216" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/issues?page=%@&per_page=%@&sort_by=%@&view_id=%@&issue_ids=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encodedView_id, encodedIssue_ids, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(created_time)" in
  let enc_view_id = Uri.pct_encode "2380600567533251" in
  let enc_issue_ids = Uri.pct_encode "23806000097533216" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/issues" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id ^ "&issue_ids=" ^ enc_issue_ids ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(created_time)"
    view_id = "2380600567533251"
    issue_ids = "23806000097533216"
    "filter" = "{`"criteria`":[{`"cfid`":`"23806000091055001`",`"api_name`":`"status`",`"field_name`":`"status`",`"criteria_condition`":`"is`",`"value`":[`"23806000097533111`"],`"relative_columns`":[{`"cfid`":`"23806000091055001`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/issues"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(created_time)",
  view_id = "2380600567533251",
  issue_ids = "23806000097533216",
  "filter" = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/issues")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(created_time)"),
    URLQueryItem(name: "view_id", value: "2380600567533251"),
    URLQueryItem(name: "issue_ids", value: "23806000097533216"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" view_id : "2380600567533251" issue_ids : "23806000097533216" "filter" : { "criteria" : [ { "cfid" : "23806000091055001", "api_name" : "status", "field_name" : "status", "criteria_condition" : "is", "value" : [ "23806000097533111" ], "relative_columns" : [ { "cfid" : "23806000091055001", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" }

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" : "#fbc11e", "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_hexcode" : "#7dcf7b" }, { "id" : "139655000000189037", "name" : "bug", "color_hexcode" : "#d359aa" }, { "id" : "139655000000493179", "name" : "problem", "color_hexcode" : "#57c065" }, { "id" : "139655000000493183", "name" : "neefix", "color_hexcode" : "#ff65cb" } ], "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 all issues from a project. Use this API to list issues within a specific 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 the page number. Example: 1

per_page

int

required

Enter the number of issues to display per page.

sort_by

String

Enter the field and direction to sort results. Accepted values: created_time, due_date, modified_time.

view_id

long

Enter the ID of a custom view to apply its saved filters and column settings.

issue_ids

String

Enter the IDs of specific issues to retrieve.

JSONObject

Specify filter criteria to narrow down the issues returned.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues?page=1&per_page=10&sort_by=ASC%28created_time%29&view_id=2380600567533251&issue_ids=23806000097533216&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(created_time)");
params.put("view_id", "2380600567533251");
params.put("issue_ids", "23806000097533216");
params.put("filter", {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(created_time)');
url.searchParams.append('view_id', '2380600567533251');
url.searchParams.append('issue_ids', '23806000097533216');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(created_time)",
  "view_id" => "2380600567533251",
  "issue_ids" => "23806000097533216",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(created_time)',
    'view_id' => '2380600567533251',
    'issue_ids' => '23806000097533216',
    '"filter"' => '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(created_time)",
    "view_id": "2380600567533251",
    "issue_ids": "23806000097533216",
    ""filter"": "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "2380600567533251", 0);
        char *enc_issue_ids = curl_easy_escape(curl, "23806000097533216", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues?page=%s&per_page=%s&sort_by=%s&view_id=%s&issue_ids=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_view_id, enc_issue_ids, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_issue_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(created_time)";
query["view_id"] = "2380600567533251";
query["issue_ids"] = "23806000097533216";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "2380600567533251", 0);
        char* enc_issue_ids = curl_easy_escape(curl, "23806000097533216", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&issue_ids=" + std::string(enc_issue_ids);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_issue_ids);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(created_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "2380600567533251" "UTF-8")
      enc-issue_ids (java.net.URLEncoder/encode "23806000097533216" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&view_id=" enc-view_id "&issue_ids=" enc-issue_ids "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(created_time)")
    q.Add("view_id", "2380600567533251")
    q.Add("issue_ids", "23806000097533216")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues?page=1&per_page=10&sort_by=ASC%28created_time%29&view_id=2380600567533251&issue_ids=23806000097533216&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(created_time)");
uriBuilder.addParameter("view_id", "2380600567533251");
uriBuilder.addParameter("issue_ids", "23806000097533216");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(created_time)',
  'view_id': '2380600567533251',
  'issue_ids': '23806000097533216',
  '"filter"': '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(created_time)"
view_id = "2380600567533251"
issue_ids = "23806000097533216"
"filter" = {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(created_time)")
    urlBuilder.addQueryParameter("view_id", "2380600567533251")
    urlBuilder.addQueryParameter("issue_ids", "23806000097533216")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(created_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"2380600567533251" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIssue_ids = [@"23806000097533216" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues?page=%@&per_page=%@&sort_by=%@&view_id=%@&issue_ids=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encodedView_id, encodedIssue_ids, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(created_time)" in
  let enc_view_id = Uri.pct_encode "2380600567533251" in
  let enc_issue_ids = Uri.pct_encode "23806000097533216" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id ^ "&issue_ids=" ^ enc_issue_ids ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(created_time)"
    view_id = "2380600567533251"
    issue_ids = "23806000097533216"
    "filter" = "{`"criteria`":[{`"cfid`":`"23806000091055001`",`"api_name`":`"status`",`"field_name`":`"status`",`"criteria_condition`":`"is`",`"value`":[`"23806000097533111`"],`"relative_columns`":[{`"cfid`":`"23806000091055001`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(created_time)",
  view_id = "2380600567533251",
  issue_ids = "23806000097533216",
  "filter" = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(created_time)"),
    URLQueryItem(name: "view_id", value: "2380600567533251"),
    URLQueryItem(name: "issue_ids", value: "23806000097533216"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" view_id : "2380600567533251" issue_ids : "23806000097533216" "filter" : { "criteria" : [ { "cfid" : "23806000091055001", "api_name" : "status", "field_name" : "status", "criteria_condition" : "is", "value" : [ "23806000097533111" ], "relative_columns" : [ { "cfid" : "23806000091055001", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" }

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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "status" : { "id" : "139655000000057085", "name" : "InProgress", "color" : "#fbc11e", "color_hexcode" : "#fbc11e", "is_closed_type" : false, "is_default" : false }, "assignee" : { "zuid" : 76721203, "zpuid" : "139655000000057657", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "tags" : [ { "id" : "139655000000155027", "name" : "issue", "color_hexcode" : "#0995ba" }, { "id" : "139655000000189037", "name" : "bug", "color_hexcode" : "#57c065" }, { "id" : "139655000000493179", "name" : "problem", "color_hexcode" : "#d359aa" }, { "id" : "139655000000493183", "name" : "needfix", "color_hexcode" : "#f28840" } ], "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" : "Critical security vulnerability identified in the user authentication module affecting session token integrity.", "checkbox1" : true, "percentage1" : 987654.0, "multipicklist1" : [ "PINK", "GREY", "RED", "SILVER", "WHITE", "BLACK" ], "user_select" : { "zuid" : 78971742, "zpuid" : "139655000000250217", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "phone1" : "+91 98452 52323", "date_1" : "2024-05-13T18:30:00.000Z", "currency1" : { "currency_code" : "USD", "formatted_amount" : "$ 34,567,654.00", "amount" : 34567654 }, "email1" : "monica.hemsworth@zylker.com", "multiline_1" : "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.", "number_1" : 12345, "url1" : "https://www.projects.com", "date_field_1" : "2024-05-01", "userpicklist_all" : { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "picklist_1" : "DESK", "mupl1" : [ { "zuid" : 83641347, "zpuid" : "139655000000415001", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" } ] } ] }
Get Issue Details

Retrieve details of an issue in a project. Use this API to fetch complete information of an issue using its ID.

GET

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

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "status" : { "id" : "139655000000057085", "name" : "InProgress", "color" : "#fbc11e", "color_hexcode" : "#fbc11e", "is_closed_type" : false, "is_default" : false }, "assignee" : { "zuid" : 76721203, "zpuid" : "139655000000072009", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "tags" : [ { "id" : "139655000000155027", "name" : "issue", "color_hexcode" : "#fbc11e" }, { "id" : "139655000000189037", "name" : "bug", "color_hexcode" : "#57c065" }, { "id" : "139655000000493179", "name" : "problem", "color_hexcode" : "#d359aa" }, { "id" : "139655000000493183", "name" : "needfix", "color_hexcode" : "#f28840" } ], "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" : "Critical authentication bypass detected in the user login module affecting enterprise clients.", "checkbox1" : true, "percentage1" : 987654.0, "multipicklist1" : [ "PINK", "GREY", "RED", "SILVER", "WHITE", "BLACK" ], "user_select" : { "zuid" : 78971742, "zpuid" : "139655000000250217", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "phone1" : "+91 98452 52323", "date_1" : "2024-05-13T18:30:00.000Z", "currency1" : { "currency_code" : "USD", "formatted_amount" : "$ 34,567,654.00", "amount" : 34567654 }, "email1" : "monica.hemsworth@zylker.com", "multiline_1" : "The issue was first reported on May 6th during a routine security audit. The authentication module fails to validate session tokens under concurrent login attempts, exposing user accounts to unauthorized access. Immediate remediation is recommended.", "number_1" : 12345, "url1" : "https://www.projects.com", "date_field_1" : "2024-05-01", "userpicklist_all" : { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "picklist_1" : "DESK", "mupl1" : [ { "zuid" : 83641347, "zpuid" : "139655000000415001", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" } ] }
Create Issue

Create an issue in a project. Use this API to add a new issue with required and optional fields.

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 title of the issue.

description

String

Enter a detailed description of the issue.

flag

String

max length : 100

Specify the visibility of the issue. Accepted values: Internal (visible only to your team) or External (visible to external stakeholders).

associated_teams

JSONObject

max length : 1000

Specify the team to associate with this issue.

JSONObject

max length : 1000

Specify the user to assign this issue to.

JSONObject

max length : 1000

Specify the current status of the issue.

due_date

String

Enter the due date for the issue in ISO 8601 format. Example: 2025-12-31T00:00:00+05:30

release_milestone

JSONObject

max length : 1000

Specify the milestone in which this issue is planned to be fixed and released.

affected_milestone

JSONObject

max length : 1000

Specify the milestone in which this issue was first observed or reported.

JSONObject

max length : 1000

Specify the severity level of the issue. Example: Critical, Major, or Minor.

is_it_reproducible

JSONObject

max length : 1000

Specify how consistently this issue can be reproduced. Example: Always, Sometimes, or Rarely.

classification

JSONObject

max length : 1000

Specify the classification or category of this issue.

JSONObject

max length : 1000

Specify the module of the project that this issue is related to.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of existing attachments to associate with this issue. Maximum 10 attachments allowed.

tags

JSONArray

max length : 10000

Enter the IDs of tags to label or categorize this issue.

followers

JSONArray

max length : 10000

Enter the IDs of users who should follow and receive notifications for this issue.

JSONObject

max length : 10000

Configure a reminder for this issue to alert assignees or followers before or on the due date.

rate_per_hour

double

max length : 100

Enter the billing rate per hour for the assignee working on this issue.

cost_rate_per_hour

double

max length : 100

Enter the internal cost per hour for the assignee working on this issue.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues";
params = Map();
params.put("name", "Authentication Token Expiry Not Enforced on Session Timeout");
params.put("description", "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.");
params.put("flag", "external");
params.put("associated_teams", {"id":"4000000062001"});
params.put("assignee", {"zpuid":"4000000002055"});
params.put("status", {"id":"4000000062001"});
params.put("due_date", "2025-12-12T02:12:00.000Z");
params.put("release_milestone", {"id":"4000000062001"});
params.put("affected_milestone", {"id":"4000000062001"});
params.put("severity", {"id":"4000000062001"});
params.put("is_it_reproducible", {"id":"4000000062001"});
params.put("classification", {"id":"4000000062001"});
params.put("module", {"id":"4000000062001"});
params.put("attachments", ["23806000097533241"]);
params.put("tags", [{"id":"238060000975404352"}]);
params.put("followers", "-");
params.put("reminder", {"type":"Task","reminder_custom_date":"-","days_before":"-","time":"22:00","notify_users":["78815938","78971742"]});
params.put("rate_per_hour", "945.25");
params.put("cost_rate_per_hour", "510.75");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues');

const payload = JSON.stringify({"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\":[\"78815938\",\"78971742\"]},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues");
request.Content = new StringContent(
    @"{""name"":""Authentication Token Expiry Not Enforced on Session Timeout"",""description"":""The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches."",""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"":[""78815938"",""78971742""]},""rate_per_hour"":""945.25"",""cost_rate_per_hour"":""510.75""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\":[\"78815938\",\"78971742\"]},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\":[\"78815938\",\"78971742\"]},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\":[\"78815938\",\"78971742\"]},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\":[\"78815938\",\"78971742\"]},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\":[\"78815938\",\"78971742\"]},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\":[\"78815938\",\"78971742\"]},\"rate_per_hour\":\"945.25\",\"cost_rate_per_hour\":\"510.75\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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":["78815938","78971742"]},"rate_per_hour":"945.25","cost_rate_per_hour":"510.75"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Authentication Token Expiry Not Enforced on Session Timeout", "description" : "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.", "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" : [ "78815938", "78971742" ] }, "rate_per_hour" : "945.25", "cost_rate_per_hour" : "510.75" }

Sample Response

200{ "id" : "2380600009754342354", "name" : "Authentication Token Expiry Not Enforced on Session Timeout", "flag" : "External", "due_date" : "2025-12-12T02:12:00.000Z", "associated_teams" : { "id" : "238060000975454323", "name" : "Risk Management Team" }, "assignee" : { "zuid" : 590675, "zpuid" : "23806000097546091", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica" }, "status" : { "id" : "2380600567533251", "name" : "Open", "color" : "#08aeea", "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica" } ] }, "tags" : [ { "id" : "238060000975404352", "name" : "security", "color_class" : "bg-tag6" } ], "rate_per_hour" : "945.25", "cost_rate_per_hour" : "510.75" }

Possible Errors

INVALID_OAUTHTOKEN HTTP 401

Update Issue

Modify an issue in a project. Use this API to modify issue details such as status, assignee, or fields.

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 updated title of the issue.

description

String

Enter the updated description of the issue.

flag

String

max length : 100

Specify the updated visibility of the issue. Accepted values: Internal (visible only to your team) or External (visible to external stakeholders).

associated_teams

JSONObject

max length : 1000

Specify the updated team association for this issue.

JSONObject

max length : 1000

Specify the updated assignee for this issue.

JSONObject

max length : 1000

Specify the updated status of the issue.

due_date

String

Enter the updated due date for the issue in ISO 8601 format. Example: 2025-12-31T00:00:00+05:30

JSONArray

max length : 10000

Update the tags associated with this issue. Use add to attach new tags or remove to detach existing ones.

release_milestone

JSONObject

max length : 1000

Specify the updated release milestone for this issue.

affected_milestone

JSONObject

max length : 1000

Specify the updated affected milestone for this issue.

JSONObject

max length : 1000

Specify the updated severity level of the issue.

is_it_reproducible

JSONObject

max length : 1000

Specify how consistently this issue can be reproduced.

classification

JSONObject

max length : 1000

Specify the updated classification or category of this issue.

JSONObject

max length : 1000

Specify the updated module, this issue belongs to.

rate_per_hour

double

max length : 100

Enter the updated billing rate per hour for the assignee working on this issue.

cost_rate_per_hour

double

max length : 100

Enter the cost per hour for the assignee working on this issue.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233";
params = Map();
params.put("name", "Authentication Token Expiry Not Enforced on Session Timeout");
params.put("description", "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.");
params.put("flag", "external");
params.put("associated_teams", {"id":"4000000062001"});
params.put("assignee", {"zpuid":"4000000002055"});
params.put("status", {"id":"4000000062001"});
params.put("due_date", "2025-12-12T02:12:00.000Z");
params.put("tags", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("release_milestone", {"id":"4000000062001"});
params.put("affected_milestone", {"id":"4000000062001"});
params.put("severity", {"id":"4000000062001"});
params.put("is_it_reproducible", {"id":"4000000062001"});
params.put("classification", {"id":"4000000062001"});
params.put("module", {"id":"4000000062001"});
params.put("rate_per_hour", "945.25");
params.put("cost_rate_per_hour", "510.75");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233');

const payload = JSON.stringify({"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");
request.Content = new StringContent(
    @"{""name"":""Authentication Token Expiry Not Enforced on Session Timeout"",""description"":""The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches."",""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""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Authentication Token Expiry Not Enforced on Session Timeout\",\"description\":\"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.\",\"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\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Authentication Token Expiry Not Enforced on Session Timeout","description":"The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.","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"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Authentication Token Expiry Not Enforced on Session Timeout", "description" : "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.", "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "status" : { "id" : "139655000000057085", "name" : "InProgress", "color" : "#fbc11e", "color_hexcode" : "#fbc11e", "is_closed_type" : false, "is_default" : false }, "assignee" : { "zuid" : 76721203, "zpuid" : "139655000000057657", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "tags" : [ { "id" : "139655000000155027", "name" : "issue", "color_hexcode" : "#fbc11e" }, { "id" : "139655000000189037", "name" : "bug", "color_hexcode" : "#57c065" }, { "id" : "139655000000493179", "name" : "problem", "color_hexcode" : "#0995ba" }, { "id" : "139655000000493183", "name" : "needfix", "color_hexcode" : "#f28840" } ], "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" : "Critical security vulnerability identified in the user authentication module affecting session token integrity.", "checkbox1" : true, "percentage1" : 987654.0, "multipicklist1" : [ "PINK", "GREY", "RED", "SILVER", "WHITE", "BLACK" ], "user_select" : { "zuid" : 78971742, "zpuid" : "139655000000250217", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "phone1" : "+91 98452 52323", "date_1" : "2024-05-13T18:30:00.000Z", "currency1" : { "currency_code" : "USD", "formatted_amount" : "$ 34,567,654.00", "amount" : 34567654 }, "email1" : "monica.hemsworth@zylker.com", "multiline_1" : "The security audit conducted on May 6th identified a critical vulnerability in the authentication module. Session tokens are not invalidated upon timeout, allowing unauthorized access to active user sessions. Immediate remediation is required to prevent potential data breaches.", "number_1" : 12345, "url1" : "https://www.projects.com", "date_field_1" : "2024-05-01", "userpicklist_all" : { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, "picklist_1" : "DESK", "mupl1" : [ { "zuid" : 83641347, "zpuid" : "139655000000415001", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" }, { "zuid" : 78815938, "zpuid" : "139655000000436259", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth" } ] }
Delete Issue

Remove an issue from a project. Use this API to permanently remove an issue using its ID.

DELETE

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

OAuth Scope:

ZohoProjects.bugs.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
Get Issue Description

Retrieve the description of an issue from a project.

GET

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

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/description")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Issue

Move an issue to another project. Use this API to move an issue by specifying the destination project ID.

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 ID of the destination project to move this issue to.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move";
params = Map();
params.put("to_project", "23806000097533251");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move');

const payload = JSON.stringify({"to_project":"23806000097533251"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"to_project":"23806000097533251"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"to_project":"23806000097533251"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"to_project":"23806000097533251"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project\":\"23806000097533251\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move");
request.Content = new StringContent(
    @"{""to_project"":""23806000097533251""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project\":\"23806000097533251\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"to_project\":\"23806000097533251\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"to_project\":\"23806000097533251\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"to_project\":\"23806000097533251\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"to_project":"23806000097533251"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"to_project":"23806000097533251"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"to_project":"23806000097533251"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"to_project\":\"23806000097533251\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"to_project":"23806000097533251"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"to_project":"23806000097533251"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"to_project\":\"23806000097533251\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/move")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"to_project":"23806000097533251"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

Sample Response

204 No Content
Clone Issue

Clone an issue in a project. Use this API to create a duplicate of an existing issue.

POST

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

OAuth Scope:

ZohoProjects.bugs.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/clone")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "bugs" : [ { "comment_count" : "0", "flag" : "Internal", "to_project" : 0, "link" : { "self_url" : "https://projects.zoho.com/restapi/portal/54336862/projects/23806000097532186/bugs/23806000097532218" }, "title" : "Admin Menu Access Control Bypass on Privilege Escalation", "added_by" : { "zpuid" : "23806000000152047", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : 53831617, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : 53831617, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "bug_prefix" : "D6W0", "attachment_count" : "1", "status" : { "colorcode" : "#08aeea", "id" : "23806000000007045", "type" : "Open" } } ] }
Get 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. Example: 1

per_page

int

Specify the number of entries to be displayed per page.

sort_by

String

Enter the sort order for activity entries. Accepted values: DESC or ASC.

JSONObject

Specify filter criteria to narrow down the activity log entries.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities?page=1&per_page=10&sort_by=ASC%28created_time%29&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(created_time)");
params.put("filter", {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(created_time)');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(created_time)",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(created_time)',
    '"filter"' => '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(created_time)",
    ""filter"": "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities?page=%s&per_page=%s&sort_by=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(created_time)";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(created_time)" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(created_time)")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities?page=1&per_page=10&sort_by=ASC%28created_time%29&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(created_time)");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(created_time)',
  '"filter"': '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(created_time)"
"filter" = {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(created_time)")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(created_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities?page=%@&per_page=%@&sort_by=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(created_time)" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(created_time)"
    "filter" = "{`"criteria`":[{`"cfid`":`"23806000091055001`",`"api_name`":`"status`",`"field_name`":`"status`",`"criteria_condition`":`"is`",`"value`":[`"23806000097533111`"],`"relative_columns`":[{`"cfid`":`"23806000091055001`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(created_time)",
  "filter" = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/activities")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(created_time)"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" "filter" : { "criteria" : [ { "cfid" : "23806000091055001", "api_name" : "status", "field_name" : "status", "criteria_condition" : "is", "value" : [ "23806000097533111" ], "relative_columns" : [ { "cfid" : "23806000091055001", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" }

Sample Response

200{ "activities" : [ { "action_time" : "2024-05-20T06:19:55.000Z", "activity" : "linkbug", "field" : { "old_value" : "", "new_value" : "", "field_name" : "Issue linked to Authentication Service ? Sprint 12 Regression" }, "project_id" : "139655000000391005", "id" : "139655000000498057", "user" : { "last_name" : "Hemsworth", "id" : "73746290", "display_name" : "Monica Hemsworth", "first_name" : "Monica", "user_photo" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=73746290", "email" : "monica.hemsworth@zylker.com" }, "activity_state" : "linked" }, { "action_time" : "2024-05-20T06:19:54.000Z", "activity" : "create", "field" : { "old_value" : "", "new_value" : "Session Token Validation Failure on Concurrent Login", "field_name" : "Issue" }, "project_id" : "139655000000391005", "id" : "139655000000498057", "user" : { "last_name" : "Hemsworth", "id" : "73746290", "display_name" : "Monica Hemsworth", "first_name" : "Monica", "user_photo" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=73746290", "email" : "monica.hemsworth@zylker.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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/statustransition")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200[ { "updated_status" : { "color" : "#08aeea", "name" : "Open", "id" : "139655000000057083", "is_closed" : false }, "updated_on" : "2024-06-03T07:30:23.772Z", "updated_by" : { "zpuid" : "139655000000057003", "id" : "73746290", "display_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com" }, "previous_status" : { "color" : "", "name" : "-", "id" : "0", "is_closed" : false } }, { "updated_status" : { "color" : "#fbc11e", "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com" }, "previous_status" : { "color" : "#08aeea", "name" : "Open", "id" : "139655000000057083", "is_closed" : false } }, { "updated_status" : { "color" : "#74cb80", "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com" }, "previous_status" : { "color" : "#fbc11e", "name" : "InProgress", "id" : "139655000000057085", "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com" }, "previous_status" : { "color" : "statuscol_yellowishorange", "name" : "InProgress", "id" : "139655000000057085", "is_closed" : false } }, { "updated_status" : { "color" : "#fbc11e", "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com" }, "previous_status" : { "color" : "#08aeea", "name" : "Open", "id" : "139655000000057083", "is_closed" : false } }, { "updated_status" : { "color" : "#74cb80", "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com" }, "previous_status" : { "color" : "#fbc11e", "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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/linkedissues")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Session token validation failure blocking downstream authentication flow", "assignee" : "monica.hemsworth@zylker.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" : "Session token validation failure blocking downstream authentication flow ? critical severity", "assignee" : "monica.hemsworth@zylker.com", "link_style" : "depend", "link_id" : "23806000097532224" } ] }, "reverse_linked_issues" : { } } }

Establish a link between multiple issues.

POST

OAuth Scope:

Parameter

Param Name
Data Type
Description
link_type

String

required

Enter the type of relationship between the issues. Example: duplicates, blocks, or is blocked by.

issue_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the issues to link to this issue. Maximum 100 issues allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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 type of relationship between the issues. Example: duplicates, blocks, or is blocked by.

issue_ids

JSONArray

required
max length : 7000
array size : 0-100

Enter the IDs of the source issues from which the links will be created. Maximum 100 issue IDs allowed.

linking_issue_ids

JSONArray

required
max length : 7000
array size : 0-100

Enter the IDs of the issues to link to the source issues. Maximum 100 issue IDs allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

Sample Input

Sample Response

Modify the link type between two linked issues.

POST

OAuth Scope:

Parameter

Param Name
Data Type
Description
link_type

String

required

Enter the type of relationship between the issues. Example: duplicates, blocks, or is blocked by.

issue_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the issues to link to this issue. Maximum 100 issues allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

Sample Input

Sample Response

Remove the link between issues in a project.

DELETE

OAuth Scope:

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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 Issues From Portal

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 IDs of the issues whose associated tasks you want to retrieve.

page

int

Enter the page number. Example: 1

per_page

int

Enter the number of tasks to display per page. Maximum 100 per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks";
params = Map();
params.put("issue_ids", "23806000097533216");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks');
url.searchParams.append('issue_ids', '23806000097533216');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks")
params = {
  "issue_ids" => "23806000097533216",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'issue_ids' => '23806000097533216',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks"

params = {
    "issue_ids": "23806000097533216",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_issue_ids = curl_easy_escape(curl, "23806000097533216", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks?issue_ids=%s&page=%s&per_page=%s", enc_issue_ids, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_issue_ids);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["issue_ids"] = "23806000097533216";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_issue_ids = curl_easy_escape(curl, "23806000097533216", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks";
        url += "?issue_ids=" + std::string(enc_issue_ids);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_issue_ids);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-issue_ids (java.net.URLEncoder/encode "23806000097533216" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks" "?issue_ids=" enc-issue_ids "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks", nil)
    q := req.URL.Query()
    q.Add("issue_ids", "23806000097533216")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks?issue_ids=23806000097533216&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("issue_ids", "23806000097533216");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks';

const params = new URLSearchParams({
  'issue_ids': '23806000097533216',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
issue_ids = "23806000097533216"
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("issue_ids", "23806000097533216")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedIssue_ids = [@"23806000097533216" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks?issue_ids=%@&page=%@&per_page=%@", encodedIssue_ids, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_issue_ids = Uri.pct_encode "23806000097533216" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks" ^ "?issue_ids=" ^ enc_issue_ids ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    issue_ids = "23806000097533216"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks"

params <- list(
  issue_ids = "23806000097533216",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/associated-tasks")!
components.queryItems = [
    URLQueryItem(name: "issue_ids", value: "23806000097533216"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

Sample Response

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

Retrieve the tasks associated with an issue from a project.

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

Enter the starting index for paginating through associated tasks. Example: 0

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks";
params = Map();
params.put("sindex", "-");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks');
url.searchParams.append('sindex', '-');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks")
params = {
  "sindex" => "-"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'sindex' => '-',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks"

params = {
    "sindex": "-"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_sindex = curl_easy_escape(curl, "-", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks?sindex=%s", enc_sindex);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_sindex);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["sindex"] = "-";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_sindex = curl_easy_escape(curl, "-", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks";
        url += "?sindex=" + std::string(enc_sindex);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_sindex);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-sindex (java.net.URLEncoder/encode "-" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks" "?sindex=" enc-sindex)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks", nil)
    q := req.URL.Query()
    q.Add("sindex", "-")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks?sindex=- HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("sindex", "-");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks';

const params = new URLSearchParams({
  'sindex': '-'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
sindex =  - 
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("sindex", "-")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedSindex = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks?sindex=%@", encodedSindex];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_sindex = Uri.pct_encode "-" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks" ^ "?sindex=" ^ enc_sindex) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    sindex = "-"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks"

params <- list(
  sindex = "-"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associated-tasks")!
components.queryItems = [
    URLQueryItem(name: "sindex", value: "-")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

sindex : -
Associate Tasks

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 IDs of the tasks to associate with this issue.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'task_ids = [2223806000097532204]'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks";
params = Map();
params.put("task_ids", [2223806000097532204]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks');
url.searchParams.append('task_ids', '[2223806000097532204]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks")
params = {
  "task_ids" => "[2223806000097532204]"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'task_ids' => '[2223806000097532204]',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks"

params = {
    "task_ids": "[2223806000097532204]"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_task_ids = curl_easy_escape(curl, "[2223806000097532204]", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks?task_ids=%s", enc_task_ids);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_task_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["task_ids"] = "[2223806000097532204]";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_task_ids = curl_easy_escape(curl, "[2223806000097532204]", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks";
        url += "?task_ids=" + std::string(enc_task_ids);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_task_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-task_ids (java.net.URLEncoder/encode "[2223806000097532204]" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks" "?task_ids=" enc-task_ids)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks", nil)
    q := req.URL.Query()
    q.Add("task_ids", "[2223806000097532204]")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks?task_ids=%5B2223806000097532204%5D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/associate-tasks");
uriBuilder.addParameter("task_ids", "[2223806000097532204]");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks';

const params = new URLSearchParams({
  'task_ids': '[2223806000097532204]'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
task_ids = [2223806000097532204]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("task_ids", "[2223806000097532204]")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedTask_ids = [@"[2223806000097532204]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks?task_ids=%@", encodedTask_ids];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_task_ids = Uri.pct_encode "[2223806000097532204]" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks" ^ "?task_ids=" ^ enc_task_ids) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    task_ids = "[2223806000097532204]"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks"

params <- list(
  task_ids = "[2223806000097532204]"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/associate-tasks")!
components.queryItems = [
    URLQueryItem(name: "task_ids", value: "[2223806000097532204]")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

task_ids : [2223806000097532204]

Sample Response

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

Associate 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 to associate tasks with. Maximum 100 issue IDs allowed.

task_ids

JSONArray

required
max length : 7000
array size : 0-100

Enter the IDs of the tasks to associate with the specified issues. Maximum 100 task IDs allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks";
params = Map();
params.put("issue_ids", "23806000097533216");
params.put("task_ids", [2223806000097532204]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks');

const payload = JSON.stringify({"issue_ids":"23806000097533216","task_ids":[2223806000097532204]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks");
request.Content = new StringContent(
    @"{""issue_ids"":""23806000097533216"",""task_ids"":[2223806000097532204]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"issue_ids":"23806000097533216","task_ids":[2223806000097532204]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"issue_ids\":\"23806000097533216\",\"task_ids\":[2223806000097532204]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/bulk-associate-tasks")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"issue_ids":"23806000097533216","task_ids":[2223806000097532204]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

Sample Response

204 No Content
Disassociate Task

Remove task association from an issue. Use this API to unlink a task from an issue.

DELETE

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

OAuth Scope:

ZohoProjects.bugs.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/task/1752587000000097101")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "issue_resolution" : { "resolver_info" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "73746290", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Authentication-Module-Schema-Fix-2024-05-21.png", "associated_by_name" : "Monica Hemsworth", "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 authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.", "resolutionDsp" : "The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off." } }
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 details describing how the issue was resolved.

status_id

long

Enter the status ID.

UDF_NCHAR

String

max length : 150

Enter the value for a character-type custom field. The field name must follow the UDF_NCHAR naming convention.

UDF_NUSER

long

Enter the user ID for a user-type custom field. The field name must follow the UDF_NUSER naming convention.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of attachments to include with the resolution. Maximum 100 attachments allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";
params = Map();
params.put("resolution", "The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.");
params.put("status_id", "23806000097533111");
params.put("UDF_NCHAR", "-");
params.put("UDF_NUSER", "-");
params.put("attachment_ids", ["23806000097533241"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution');

const payload = JSON.stringify({"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
request.Content = new StringContent(
    @"{""resolution"":""The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off."",""status_id"":""23806000097533111"",""UDF_NCHAR"":""-"",""UDF_NUSER"":""-"",""attachment_ids"":[""23806000097533241""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "resolution" : "The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.", "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 updated resolution details for this issue.

status_id

long

Enter the status ID.

UDF_NCHAR

String

max length : 150

Enter the value for a character-type custom field. The field name must follow the UDF_NCHAR naming convention.

UDF_NUSER

long

Enter the user ID for a user-type custom field. The field name must follow the UDF_NUSER naming convention.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of attachments to include with the updated resolution. Maximum 100 attachments allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PUT \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";
params = Map();
params.put("resolution", "The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.");
params.put("status_id", "23806000097533111");
params.put("UDF_NCHAR", "-");
params.put("UDF_NUSER", "-");
params.put("attachment_ids", ["23806000097533241"]);
response = invokeUrl
[
    url: url
    type: PUT
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution');

const payload = JSON.stringify({"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Put.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PUT",
  CURLOPT_POSTFIELDS => '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}'

response = requests.put(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
request.Content = new StringContent(
    @"{""resolution"":""The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off."",""status_id"":""23806000097533111"",""UDF_NCHAR"":""-"",""UDF_NUSER"":""-"",""attachment_ids"":[""23806000097533241""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}")
    req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PUT https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution';

const options = {
  method: 'PUT',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PUT"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PUT"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}|json} in
  Lwt_main.run (
    Client.put ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" -Method PUT -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

response <- PUT(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"resolution\":\"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.\",\"status_id\":\"23806000097533111\",\"UDF_NCHAR\":\"-\",\"UDF_NUSER\":\"-\",\"attachment_ids\":[\"23806000097533241\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")!
var request = URLRequest(url: url)
request.httpMethod = "PUT"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"resolution":"The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.","status_id":"23806000097533111","UDF_NCHAR":"-","UDF_NUSER":"-","attachment_ids":["23806000097533241"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "resolution" : "The authentication module session token invalidation logic was patched to enforce expiry on timeout. Regression tests have been completed and the fix is pending QA sign-off.", "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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/resolution")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "followers" : [ { "zpuid" : "23806000003669048", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "57261352", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" } ] }
Follow Issue

Follow an issue to receive updates or notifications.

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

Enter the IDs of the users to add as followers of this issue. Maximum 100 users allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers";
params = Map();
params.put("follower_ids", [57261352]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers');

const payload = JSON.stringify({"follower_ids":[57261352]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"follower_ids":[57261352]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"follower_ids":[57261352]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"follower_ids":[57261352]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"follower_ids\":[57261352]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");
request.Content = new StringContent(
    @"{""follower_ids"":[57261352]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"follower_ids\":[57261352]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"follower_ids\":[57261352]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"follower_ids\":[57261352]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"follower_ids\":[57261352]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"follower_ids":[57261352]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"follower_ids":[57261352]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"follower_ids":[57261352]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"follower_ids\":[57261352]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"follower_ids":[57261352]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"follower_ids":[57261352]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"follower_ids\":[57261352]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"follower_ids":[57261352]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

Sample Response

200{ "followers" : [ { "zpuid" : "23806000003669048", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "57261352", "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/followers")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Custom Views

Retrieve all issue custom views from the Zoho Projects portal.

GET

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

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/issues/customviews")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
Get Project Custom Views

Retrieve issue custom views from a project.

GET

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

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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-06-2023", "description" : "Displays all records created on June 30, 2023. Use this view to track and review items logged on that date.", "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 Details From Project

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

GET

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

OAuth Scope:

ZohoProjects.bugs.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/customviews/1752587000000097269")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Displays all issues created on June 30, 2023 during the production failure window. Use this view to review, triage, and track resolution progress for affected records.", "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-06-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 associated with 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 the IDs of file extension types to filter attachments by file format.

app_types

JSONArray

Enter the application integration type to filter attachments by their source application.

sub_type

String

Filter attachments by where they were added. Accepted values: comments, resolution, or bug.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments";
params = Map();
params.put("extension_ids", "-");
params.put("app_types", "-");
params.put("sub_type", "-");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments');
url.searchParams.append('extension_ids', '-');
url.searchParams.append('app_types', '-');
url.searchParams.append('sub_type', '-');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments")
params = {
  "extension_ids" => "-",
  "app_types" => "-",
  "sub_type" => "-"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'extension_ids' => '-',
    'app_types' => '-',
    'sub_type' => '-',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments"

params = {
    "extension_ids": "-",
    "app_types": "-",
    "sub_type": "-"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_extension_ids = curl_easy_escape(curl, "-", 0);
        char *enc_app_types = curl_easy_escape(curl, "-", 0);
        char *enc_sub_type = curl_easy_escape(curl, "-", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments?extension_ids=%s&app_types=%s&sub_type=%s", enc_extension_ids, enc_app_types, enc_sub_type);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_extension_ids);
        curl_free(enc_app_types);
        curl_free(enc_sub_type);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["extension_ids"] = "-";
query["app_types"] = "-";
query["sub_type"] = "-";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_extension_ids = curl_easy_escape(curl, "-", 0);
        char* enc_app_types = curl_easy_escape(curl, "-", 0);
        char* enc_sub_type = curl_easy_escape(curl, "-", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments";
        url += "?extension_ids=" + std::string(enc_extension_ids);
        url += "&app_types=" + std::string(enc_app_types);
        url += "&sub_type=" + std::string(enc_sub_type);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_extension_ids);
        curl_free(enc_app_types);
        curl_free(enc_sub_type);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-extension_ids (java.net.URLEncoder/encode "-" "UTF-8")
      enc-app_types (java.net.URLEncoder/encode "-" "UTF-8")
      enc-sub_type (java.net.URLEncoder/encode "-" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" "?extension_ids=" enc-extension_ids "&app_types=" enc-app_types "&sub_type=" enc-sub_type)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments", nil)
    q := req.URL.Query()
    q.Add("extension_ids", "-")
    q.Add("app_types", "-")
    q.Add("sub_type", "-")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments?extension_ids=-&app_types=-&sub_type=- HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("extension_ids", "-");
uriBuilder.addParameter("app_types", "-");
uriBuilder.addParameter("sub_type", "-");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments';

const params = new URLSearchParams({
  'extension_ids': '-',
  'app_types': '-',
  'sub_type': '-'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
extension_ids =  - 
app_types =  - 
sub_type =  - 
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("extension_ids", "-")
    urlBuilder.addQueryParameter("app_types", "-")
    urlBuilder.addQueryParameter("sub_type", "-")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedExtension_ids = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedApp_types = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSub_type = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments?extension_ids=%@&app_types=%@&sub_type=%@", encodedExtension_ids, encodedApp_types, encodedSub_type];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_extension_ids = Uri.pct_encode "-" in
  let enc_app_types = Uri.pct_encode "-" in
  let enc_sub_type = Uri.pct_encode "-" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" ^ "?extension_ids=" ^ enc_extension_ids ^ "&app_types=" ^ enc_app_types ^ "&sub_type=" ^ enc_sub_type) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    extension_ids = "-"
    app_types = "-"
    sub_type = "-"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments"

params <- list(
  extension_ids = "-",
  app_types = "-",
  sub_type = "-"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments")!
components.queryItems = [
    URLQueryItem(name: "extension_ids", value: "-"),
    URLQueryItem(name: "app_types", value: "-"),
    URLQueryItem(name: "sub_type", value: "-")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Monica Hemsworth", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/c9yhef2d461e0943a4a4490b5a4e9b1e13b4d?x-cli-msg=eyJtb2R1bGUiOiJidWciLCJlbnRpdHlfaWQiOiIxMzk2NTUwMDAwMDA0MzkwMDVfMTM5NjU1MDAwMDAwNDM5MzExIn0&size=l", "file_info" : { "size" : "3618", "name" : "SessionTokenValidationFix.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" : "Monica Hemsworth", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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 associate with this issue.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments";
params = Map();
params.put("attachment_ids", ["23806000097533241"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments');
url.searchParams.append('attachment_ids', '["23806000097533241"]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments")
params = {
  "attachment_ids" => "[\"23806000097533241\"]"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'attachment_ids' => '["23806000097533241"]',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments"

params = {
    "attachment_ids": "[\"23806000097533241\"]"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_attachment_ids = curl_easy_escape(curl, "[\"23806000097533241\"]", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments?attachment_ids=%s", enc_attachment_ids);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_attachment_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["attachment_ids"] = "[\"23806000097533241\"]";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_attachment_ids = curl_easy_escape(curl, "[\"23806000097533241\"]", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments";
        url += "?attachment_ids=" + std::string(enc_attachment_ids);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_attachment_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-attachment_ids (java.net.URLEncoder/encode "[\"23806000097533241\"]" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" "?attachment_ids=" enc-attachment_ids)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments", nil)
    q := req.URL.Query()
    q.Add("attachment_ids", "[\"23806000097533241\"]")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments?attachment_ids=%5B%2223806000097533241%22%5D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("attachment_ids", "[\"23806000097533241\"]");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments';

const params = new URLSearchParams({
  'attachment_ids': '["23806000097533241"]'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
attachment_ids = ["23806000097533241"]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("attachment_ids", "[\"23806000097533241\"]")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedAttachment_ids = [@"[\"23806000097533241\"]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments?attachment_ids=%@", encodedAttachment_ids];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_attachment_ids = Uri.pct_encode "[\"23806000097533241\"]" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" ^ "?attachment_ids=" ^ enc_attachment_ids) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    attachment_ids = "[`"23806000097533241`"]"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments"

params <- list(
  attachment_ids = "[\"23806000097533241\"]"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments")!
components.queryItems = [
    URLQueryItem(name: "attachment_ids", value: "[\"23806000097533241\"]")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

attachment_ids : ["23806000097533241"]
Disassociate Attachment

Disassociate an attachment from an issue.

DELETE

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

OAuth Scope:

ZohoProjects.bugs.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/1752587000000097260")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
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 associated with 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 the page number. Example: 1

per_page

int

Enter the number of comments to display per page.

sort_by

String

Enter the sort order for comments. Accepted values: DESC or ASC.

JSONObject

Specify filter criteria to narrow down the comments returned.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments?page=1&per_page=10&sort_by=ASC%28created_time%29&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(created_time)");
params.put("filter", {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(created_time)');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(created_time)",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(created_time)',
    '"filter"' => '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(created_time)",
    ""filter"": "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments?page=%s&per_page=%s&sort_by=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(created_time)";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(created_time)", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(created_time)" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(created_time)")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments?page=1&per_page=10&sort_by=ASC%28created_time%29&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22api_name%22%3A%22status%22%2C%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%2223806000097533111%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%2223806000091055001%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(created_time)");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(created_time)',
  '"filter"': '{"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(created_time)"
"filter" = {"criteria":[{"cfid":"23806000091055001","api_name":"status","field_name":"status","criteria_condition":"is","value":["23806000097533111"],"relative_columns":[{"cfid":"23806000091055001","offset":"1","unit":"days","prior":"before"}]}],"pattern":"1"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(created_time)")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(created_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments?page=%@&per_page=%@&sort_by=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(created_time)" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(created_time)"
    "filter" = "{`"criteria`":[{`"cfid`":`"23806000091055001`",`"api_name`":`"status`",`"field_name`":`"status`",`"criteria_condition`":`"is`",`"value`":[`"23806000097533111`"],`"relative_columns`":[{`"cfid`":`"23806000091055001`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`"}]}],`"pattern`":`"1`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(created_time)",
  "filter" = "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(created_time)"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"23806000091055001\",\"api_name\":\"status\",\"field_name\":\"status\",\"criteria_condition\":\"is\",\"value\":[\"23806000097533111\"],\"relative_columns\":[{\"cfid\":\"23806000091055001\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\"}]}],\"pattern\":\"1\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(created_time)" "filter" : { "criteria" : [ { "cfid" : "23806000091055001", "api_name" : "status", "field_name" : "status", "criteria_condition" : "is", "value" : [ "23806000097533111" ], "relative_columns" : [ { "cfid" : "23806000091055001", "offset" : "1", "unit" : "days", "prior" : "before" } ] } ], "pattern" : "1" }

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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "attachments" : [ { "app_name" : "", "created_time" : "2026-01-09T11:39:38.771Z", "permanent_url" : "https://workdrive.zoho.com/file/b8vet771b86e7c97147af9b7e1754c19b5118?authId=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "associated_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=eyJtb2R1bGUiOiJidWdfY29tbWVudCIsImVudGl0eV9pZCI6IjIzOTE4ODAwMDAwNjE0NTAwNV8yMzkxODgwMDAwMDYzMDcwMjcifQ&size=l", "file_info" : { "size" : "4197012", "name" : "Session-Token-Bug-Comment-2025-10-15.png", "id" : "b8vet771b86e7c97147af9b7e1754c19b5118", "type" : "image/png" }, "download_url" : "https://download.zoho.com/v1/workdrive/download/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "id" : "139655000000505161", "created_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "entity" : { "id" : "139655000000507027", "type" : "bug_comment" }, "associated_time" : "2026-01-09T11:39:38.771Z" } ] } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 2, "page" : 1, "sort_by" : [ { "field_names" : [ "created_time" ], "order_by" : "ASCENDING" } ] } }
Get 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "attachments" : [ { "app_name" : "", "created_time" : "2026-01-09T11:39:38.771Z", "permanent_url" : "https://workdrive.zoho.com/file/b8vet771b86e7c97147af9b7e1754c19b5118?authId=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "associated_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=eyJtb2R1bGUiOiJidWdfY29tbWVudCIsImVudGl0eV9pZCI6IjIzOTE4ODAwMDAwNjE0NTAwNV8yMzkxODgwMDAwMDYzMDcwMjcifQ&size=l", "file_info" : { "size" : "4197012", "name" : "Authentication-Bug-Report-2025-10-15.png", "id" : "b8vet771b86e7c97147af9b7e1754c19b5118", "type" : "image/png" }, "download_url" : "https://download.zoho.com/v1/workdrive/download/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "id" : "139655000000505161", "created_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "entity" : { "id" : "139655000000507027", "type" : "bug_comment" }, "associated_time" : "2026-01-09T11:39:38.771Z" } ] } ] }
Get Attachment

Retrieve attachments of a comment. Use this API to fetch files associated with a specific comment.

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 ID of the comment to retrieve its associated attachments.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments?comment_id=23806000097572017' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments";
params = Map();
params.put("comment_id", "23806000097572017");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments');
url.searchParams.append('comment_id', '23806000097572017');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments")
params = {
  "comment_id" => "23806000097572017"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'comment_id' => '23806000097572017',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments"

params = {
    "comment_id": "23806000097572017"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_comment_id = curl_easy_escape(curl, "23806000097572017", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments?comment_id=%s", enc_comment_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_comment_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["comment_id"] = "23806000097572017";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_comment_id = curl_easy_escape(curl, "23806000097572017", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments";
        url += "?comment_id=" + std::string(enc_comment_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_comment_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-comment_id (java.net.URLEncoder/encode "23806000097572017" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments" "?comment_id=" enc-comment_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments", nil)
    q := req.URL.Query()
    q.Add("comment_id", "23806000097572017")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments?comment_id=23806000097572017 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments");
uriBuilder.addParameter("comment_id", "23806000097572017");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments';

const params = new URLSearchParams({
  'comment_id': '23806000097572017'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
comment_id = "23806000097572017"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("comment_id", "23806000097572017")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedComment_id = [@"23806000097572017" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments?comment_id=%@", encodedComment_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_comment_id = Uri.pct_encode "23806000097572017" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments" ^ "?comment_id=" ^ enc_comment_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    comment_id = "23806000097572017"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments"

params <- list(
  comment_id = "23806000097572017"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/attachments/comments")!
components.queryItems = [
    URLQueryItem(name: "comment_id", value: "23806000097572017")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

comment_id : "23806000097572017"

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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/c9yhe43939cebab334d45b154220be6a86156?x-cli-msg=eyJtb2R1bGUiOiJidWdfY29tbWVudCIsImVudGl0eV9pZCI6IjEzOTY1NTAwMDAwMDQzOTAwNV8xMzk2NTUwMDAwMDA1MDUxNTMifQ&size=l", "file_info" : { "size" : "2480691", "name" : "Authentication-Module-Security-Audit-2024-05-21.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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "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 content of the comment to post on this issue.

notify_users

JSONArray

max length : 7000
array size : 0-100

Enter the ZUIDs of the users to notify about this comment. Maximum 100 users allowed.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of attachments to include with this comment. Maximum 100 attachments allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments";
params = Map();
params.put("comment", "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.");
params.put("notify_users", ["78815938","78971742"]);
params.put("attachment_ids", ["23806000097533241"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments');

const payload = JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments");
request.Content = new StringContent(
    @"{""comment"":""The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off."",""notify_users"":[""78815938"",""78971742""],""attachment_ids"":[""23806000097533241""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"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/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "notify_users" : [ "78815938", "78971742" ], "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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "attachments" : [ { "app_name" : "", "created_time" : "2026-01-09T11:39:38.771Z", "permanent_url" : "https://workdrive.zoho.com/file/b8vet771b86e7c97147af9b7e1754c19b5118?authId=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "associated_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=eyJtb2R1bGUiOiJidWdfY29tbWVudCIsImVudGl0eV9pZCI6IjIzOTE4ODAwMDAwNjE0NTAwNV8yMzkxODgwMDAwMDYzMDcwMjcifQ&size=l", "file_info" : { "size" : "4197012", "name" : "Session-Token-Bug-Comment-2025-10-15.png", "id" : "b8vet771b86e7c97147af9b7e1754c19b5118", "type" : "image/png" }, "download_url" : "https://download.zoho.com/v1/workdrive/download/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "id" : "139655000000505161", "created_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "entity" : { "id" : "139655000000507027", "type" : "bug_comment" }, "associated_time" : "2026-01-09T11:39:38.771Z" } ] } ], "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 updated content of the comment.

notify_users

JSONArray

max length : 7000
array size : 0-100

Enter the ZUIDs of the users to notify about this comment update. Maximum 100 users allowed.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of attachments to associate with the updated comment. Maximum 100 attachments allowed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046";
params = Map();
params.put("comment", "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.");
params.put("notify_users", ["78815938","78971742"]);
params.put("attachment_ids", ["23806000097533241"]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046');

const payload = JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""comment"":""The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off."",""notify_users"":[""78815938"",""78971742""],""attachment_ids"":[""23806000097533241""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"notify_users\":[\"78815938\",\"78971742\"],\"attachment_ids\":[\"23806000097533241\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","notify_users":["78815938","78971742"],"attachment_ids":["23806000097533241"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "notify_users" : [ "78815938", "78971742" ], "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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "attachments" : [ { "app_name" : "", "created_time" : "2026-01-09T11:39:38.771Z", "permanent_url" : "https://workdrive.zoho.com/file/b8vet771b86e7c97147af9b7e1754c19b5118?authId=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "associated_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "preview_url" : "https://previewengine.zoho.com/thumbnail/WD/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=eyJtb2R1bGUiOiJidWdfY29tbWVudCIsImVudGl0eV9pZCI6IjIzOTE4ODAwMDAwNjE0NTAwNV8yMzkxODgwMDAwMDYzMDcwMjcifQ&size=l", "file_info" : { "size" : "4197012", "name" : "Session-Token-Bug-Comment-2025-10-15.png", "id" : "b8vet771b86e7c97147af9b7e1754c19b5118", "type" : "image/png" }, "download_url" : "https://download.zoho.com/v1/workdrive/download/b8vet771b86e7c97147af9b7e1754c19b5118?x-cli-msg=%7B%22module%22%3A%22bug_comment%22%2C%22entity_id%22%3A%22239188000006145005_239188000006307027%22%7D", "id" : "139655000000505161", "created_by" : { "zpuid" : "139655000000057003", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : 73746290, "is_client_user" : false, "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com" }, "entity" : { "id" : "139655000000507027", "type" : "bug_comment" }, "associated_time" : "2026-01-09T11:39:38.771Z" } ] } ] }
Delete Comment

Remove a comment from an issue. Use this API to remove a comment using its ID.

DELETE

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

OAuth Scope:

ZohoProjects.bugs.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/issues/1752587000000097233/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Retrieve all task lists across the Zoho Projects portal.

GET

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

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number to retrieve. Default: 1.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page. Accepted range: 1-200. Default: 100.

sort_by

String

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

  1. id
  2. last_modified_time
  3. created_time
  4. flag

view_id

long

Enter the ID of a custom view.

JSONObject

Specify the filter criteria.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=0&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22module_name%22%3A%22task%22%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_id", "0");
params.put("filter", {"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_id', '0');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)",
  "view_id" => "0",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '0',
    '"filter"' => '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)",
    "view_id": "0",
    ""filter"": "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "0", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists?page=%s&per_page=%s&sort_by=%s&view_id=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_view_id, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "0";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "0", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "0" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&view_id=" enc-view_id "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_id", "0")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=0&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22module_name%22%3A%22task%22%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_id", "0");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)',
  'view_id': '0',
  '"filter"': '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
view_id = "0"
"filter" = {"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_id", "0")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"0" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists?page=%@&per_page=%@&sort_by=%@&view_id=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encodedView_id, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "0" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
    view_id = "0"
    "filter" = "{`"criteria`":[{`"field_name`":`"status`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"module_name`":`"task`"}],`"pattern`":`"1 AND 2`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)",
  view_id = "0",
  "filter" = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/all-tasklists")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_id", value: "0"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_time)" view_id : "0" "filter" : { "criteria" : [ { "field_name" : "status", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "module_name" : "task" } ], "pattern" : "1 AND 2" }

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", "color" : "#74cb80" } ] }

Possible Errors

INVALID_TICKET HTTP 401

INVALID_OAUTHTOKEN HTTP 401

Get Project Task Lists

Retrieve all 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
page

int

default : 1

Enter the page number to retrieve. Default: 1.

per_page

int

limit : 1-200
default : 100

Specify the number of entries to be displayed per page. Accepted range: 1-200. Default: 100.

sort_by

String

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

  1. id
  2. last_modified_time
  3. created_time
  4. flag

view_id

long

Enter the ID of a custom view.

JSONObject

Specify the filter criteria.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=0&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22module_name%22%3A%22task%22%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_id", "0");
params.put("filter", {"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_id', '0');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)",
  "view_id" => "0",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '0',
    '"filter"' => '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)",
    "view_id": "0",
    ""filter"": "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "0", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists?page=%s&per_page=%s&sort_by=%s&view_id=%s&\"filter\"=%s", enc_page, enc_per_page, enc_sort_by, enc_view_id, enc_"filter");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "0";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "0", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&"filter"=" + std::string(enc_"filter");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_"filter");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "0" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&view_id=" enc-view_id "&"filter"=" enc-"filter")]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_id", "0")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_id=0&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22module_name%22%3A%22task%22%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_id", "0");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)',
  'view_id': '0',
  '"filter"': '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
view_id = "0"
"filter" = {"criteria":[{"field_name":"status","criteria_condition":"contains","value":["1752587000000097269"],"module_name":"task"}],"pattern":"1 AND 2"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_id", "0")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"0" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists?page=%@&per_page=%@&sort_by=%@&view_id=%@&"filter"=%@", encodedPage, encodedPer_page, encodedSort_by, encodedView_id, encoded"filter"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "0" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id ^ "&"filter"=" ^ enc_"filter") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
    view_id = "0"
    "filter" = "{`"criteria`":[{`"field_name`":`"status`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"module_name`":`"task`"}],`"pattern`":`"1 AND 2`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)",
  view_id = "0",
  "filter" = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_id", value: "0"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"module_name\":\"task\"}],\"pattern\":\"1 AND 2\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_time)" view_id : "0" "filter" : { "criteria" : [ { "field_name" : "status", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "module_name" : "task" } ], "pattern" : "1 AND 2" }

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", "color" : "#74cb80" } ] }

Possible Errors

INVALID_TICKET HTTP 401

INVALID_OAUTHTOKEN HTTP 401

Get Details

Retrieve the details of a specific task list. Use this API to fetch metadata and configuration of a task list within a project.

GET

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

OAuth Scope:

ZohoProjects.tasklists.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Authentication Module Security Audit ? Task List", "id" : "4000001392009", "created_by" : { "zpuid" : "4000000002143", "name" : "Henry Clark", "last_name" : "Clark", "first_name" : "Henry", "email" : "henry.clark@zylker.com", "zuid" : "19621084" }, "status" : "active", "color" : "#74cb80" }
Create Task List

Create a new task list in a 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 milestone ID.

flag

String

max length : 100

Specify the visibility of the task list. Accepted values: internal or external.

status

String

max length : 100

Specify the status of the task list. Accepted values: active or completed.

JSONArray

max length : 10000

Specify the tags to associate with this task list. Use add to attach new tags or remove to detach existing ones.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists' \
-H 'Authorization: Bearer 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"}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists";
params = Map();
params.put("name", "Tasklist");
params.put("milestone", {"id":"4000000062001"});
params.put("flag", "internal");
params.put("status", "active");
params.put("tags", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists');

const payload = JSON.stringify({"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists");
request.Content = new StringContent(
    @"{""name"":""Tasklist"",""milestone"":{""id"":""4000000062001""},""flag"":""internal"",""status"":""active"",""tags"":[{""add"":[{""id"":""4000000062001""}],""remove"":[{""id"":""4000000062001""}],""id"":""4000000062001""}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Authentication Module Security Audit ? Task List", "id" : "4000001396003", "created_by" : { "zpuid" : "4000000002143", "name" : "Henry Clark", "last_name" : "Clark", "first_name" : "Henry", "email" : "henry.clark@zylker.com", "zuid" : "19621084" }, "status" : "active", "color" : "#74cb80" }
Update Task List

Modify details of an existing 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 name of the task list.

milestone

JSONObject

Specify the milestone to associate with this task list. Enter the milestone ID.

flag

String

max length : 100

Specify the visibility of the task list. Accepted values: internal (visible only to your team) or external (visible to external stakeholders).

status

String

max length : 100

Specify the status of the task list. Accepted values: active or completed.

JSONArray

max length : 10000

Update the tags associated with this task list. Use add to attach new tags or remove to detach existing ones.

color

String

Enter the color of the tasklist.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]' \
-H 'Authorization: Bearer 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"}],"color":"#67a0ff"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]";
params = Map();
params.put("name", "Tasklist");
params.put("milestone", {"id":"4000000062001"});
params.put("flag", "internal");
params.put("status", "active");
params.put("tags", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("color", "#67a0ff");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]');

const payload = JSON.stringify({"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"#67a0ff\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");
request.Content = new StringContent(
    @"{""name"":""Tasklist"",""milestone"":{""id"":""4000000062001""},""flag"":""internal"",""status"":""active"",""tags"":[{""add"":[{""id"":""4000000062001""}],""remove"":[{""id"":""4000000062001""}],""id"":""4000000062001""}],""color"":""#67a0ff""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"#67a0ff\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"#67a0ff\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"#67a0ff\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"#67a0ff\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"#67a0ff\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Tasklist\",\"milestone\":{\"id\":\"4000000062001\"},\"flag\":\"internal\",\"status\":\"active\",\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"color\":\"#67a0ff\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Tasklist","milestone":{"id":"4000000062001"},"flag":"internal","status":"active","tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"color":"#67a0ff"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

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" : "Authentication Module Security Audit ? Task List", "id" : "4000001392009", "created_by" : { "zpuid" : "4000000002143", "name" : "Henry Clark", "last_name" : "Clark", "first_name" : "Henry", "email" : "henry.clark@zylker.com", "zuid" : "19621084" }, "status" : "active", "color" : "#74cb80" }
Delete Task List

Remove a task list from a project permanently.

DELETE

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

OAuth Scope:

ZohoProjects.tasklists.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
Create Default Task List

Create a default task list for a project.

POST

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

OAuth Scope:

ZohoProjects.tasklists.CREATE

Parameter

Param Name
Data Type
Description
flag

String

required
max length : 100

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

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"flag":"internal"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists";
params = Map();
params.put("flag", "internal");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists');

const payload = JSON.stringify({"flag":"internal"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"flag":"internal"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"flag":"internal"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"flag":"internal"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"flag\":\"internal\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists");
request.Content = new StringContent(
    @"{""flag"":""internal""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"flag\":\"internal\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"flag\":\"internal\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"flag\":\"internal\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"flag":"internal"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/default-tasklists");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"flag\":\"internal\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"flag":"internal"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"flag":"internal"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"flag":"internal"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"flag\":\"internal\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"flag":"internal"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"flag":"internal"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"flag\":\"internal\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/default-tasklists")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"flag":"internal"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "flag" : "internal" }

Sample Response

200{ "sequence" : 2, "flag" : "external", "name" : "General", "id" : "4000000157001", "is_default" : true }
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 Multiple 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

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

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)
Supported fields :

  1. last_modified_time
  2. created_time

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments?page=%s&per_page=%s&sort_by=%s", enc_page, enc_per_page, enc_sort_by);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/comments");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments?page=%@&per_page=%@&sort_by=%@", encodedPage, encodedPer_page, encodedSort_by];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_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" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "admin@zylker.com" }, "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "id" : "4000000028017", "created_by" : { "zpuid" : "4000000002471", "full_name" : "Monica Hemsworth", "name" : "Monica", "last_name" : "Hemsworth", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "admin@zylker.com" } } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 } }
Get Comment

Retrieve a specific comment from a task list. Use this API to fetch the details of a single comment posted on a task list.

GET

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

OAuth Scope:

ZohoProjects.tasklists.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "id" : "4000000028017", "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "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" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" } }
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 content of the comment.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of attachments to include with this comment. Maximum 10 attachments allowed. You can use this APIto upload attachments and get the attachment IDs.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments";
params = Map();
params.put("comment", "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.");
params.put("attachments", [23806000073742867]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments');

const payload = JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments");
request.Content = new StringContent(
    @"{""comment"":""The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off."",""attachments"":[23806000073742867]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","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]/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "attachments" : [ 23806000073742867 ] }

Sample Response

201[ { "id" : "4000000028017", "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "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" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" } } ]
Update Comment

Modify an existing comment on 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 content of the comment.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of attachments to include with this comment. Maximum 10 attachments allowed. You can use this APIto upload attachments and get the attachment IDs.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046";
params = Map();
params.put("comment", "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.");
params.put("attachments", [23806000073742867]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046');

const payload = JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""comment"":""The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off."",""attachments"":[23806000073742867]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","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]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"comment\":\"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.\",\"attachments\":[23806000073742867]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"comment":"The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.","attachments":[23806000073742867]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "attachments" : [ 23806000073742867 ] }

Sample Response

200[ { "id" : "4000000028017", "comment" : "The authentication module patch has been reviewed. Regression testing is complete and the fix is ready for QA sign-off.", "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" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" } } ]
Delete Comment

Remove a comment from a task list permanently.

DELETE

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

OAuth Scope:

ZohoProjects.tasklists.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Followers

Retrieve the list of followers for a specific task list. Use this API to view who is monitoring updates and changes to a task list in a project.

GET

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

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/followers")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

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

Follow a task list to receive updates and notifications. Use this API to subscribe a user to activity on a specific task list within a project.

POST

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

OAuth Scope:

ZohoProjects.tasklists.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/follow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

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

Unfollow a task list to stop receiving its notifications. Use this API to unsubscribe a user from activity updates on a specific task list within a project.

POST

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

OAuth Scope:

ZohoProjects.tasklists.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/unfollow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
Task List Templates

This module covers operations related to the task list template within Zoho Projects. Use this API to retrieve task lists from a template, get tasks within a task list template, or convert a task list into a template.

Get Task Lists from a Template

Retrieves task lists that are associated with a template in the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/templates/tasklists

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number to retrieve.

per_page

int

limit : 1-200
default : 100

Specify the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/templates/tasklists");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "task_list_templates" : [ { "sequence" : 1, "created_time" : "2024-08-08T07:16:14.656Z", "name" : "TL", "id" : "18000000080007" } ] }

Possible Errors

INVALID_TICKET HTTP 401

INVALID_OAUTHTOKEN HTTP 401

Get Tasks from Task List Template

Retrieve all tasks within a specific task list template.

GET

/api/v3/portal/[PORTALID]/templates/tasklists/[TASKLISTID]/tasks

OAuth Scope:

ZohoProjects.tasklists.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number to retrieve.

per_page

int

limit : 1-200
default : 100

Specify the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/templates/tasklists/[TASKLISTID]/tasks");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/templates/tasklists/[TASKLISTID]/tasks")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "task_templates" : [ { "duration" : "1", "sequence" : 58, "start_after_frequency" : "days", "start_after" : "0", "depth" : 0, "duration_type" : "days", "description" : "Review and validate session token expiry settings across all authentication endpoints.", "id" : "18000000080011", "title" : "Authentication Endpoint Session Token Review", "is_parent" : "false" } ] }

Possible Errors

INVALID_TICKET HTTP 401

INVALID_OAUTHTOKEN HTTP 401

Make as Task Template

Convert an existing task list into a reusable template.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasklists/[TASKLISTID]/make-as-template

OAuth Scope:

ZohoProjects.tasklists.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/make-as-template");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasklists/[TASKLISTID]/make-as-template")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

201{ "id" : "4000000014025", "name" : "Authentication Module Security Audit ? Task List", "created_time" : "2025-12-10T05:34:33.835Z", "created_by" : { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "s", "email" : "admin@zylker.com", "first_name" : "s", "last_name" : "s" } }
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

Retrieve all tasks across the Zoho Projects portal. Use this API to fetch tasks from all projects within a portal.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number to retrieve.

per_page

int

limit : 1-200
default : 100

Enter the number of tasks to retrieve per page.

JSONObject

Specify the filter criteria to apply to the task list.

sort_by

String

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

  1. id
  2. name
  3. start_date
  4. end_date
  5. completion_percentage
  6. created_time
  7. last_modified_time
  8. created_by
  9. is_completed

view_id

long

Enter the ID of the custom view to apply.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B4000000000485%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28last_modified_time%29&view_id=4000000026001' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"});
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_id", "4000000026001");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tasks');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_id', '4000000026001');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks")
params = {
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}",
  "sort_by" => "ASC(last_modified_time)",
  "view_id" => "4000000026001"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '4000000026001',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks"

params = {
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}",
    "sort_by": "ASC(last_modified_time)",
    "view_id": "4000000026001"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "4000000026001", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks?page=%s&per_page=%s&\"filter\"=%s&sort_by=%s&view_id=%s", enc_page, enc_per_page, enc_"filter", enc_sort_by, enc_view_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "4000000026001";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "4000000026001", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "4000000026001" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks" "?page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&sort_by=" enc-sort_by "&view_id=" enc-view_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_id", "4000000026001")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/tasks?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B4000000000485%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28last_modified_time%29&view_id=4000000026001 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_id", "4000000026001");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}',
  'sort_by': 'ASC(last_modified_time)',
  'view_id': '4000000026001'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
"filter" = {"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}
sort_by = "ASC(last_modified_time)"
view_id = "4000000026001"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_id", "4000000026001")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"4000000026001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tasks?page=%@&per_page=%@&"filter"=%@&sort_by=%@&view_id=%@", encodedPage, encodedPer_page, encoded"filter", encodedSort_by, encodedView_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "4000000026001" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"field_name`":`"status`",`"criteria_condition`":`"contains`",`"value`":[4000000000485]}],`"pattern`":`"1`"}"
    sort_by = "ASC(last_modified_time)"
    view_id = "4000000026001"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks"

params <- list(
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}",
  sort_by = "ASC(last_modified_time)",
  view_id = "4000000026001"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_id", value: "4000000026001")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" "filter" : { "criteria" : [ { "field_name" : "status", "criteria_condition" : "contains", "value" : [ 4000000000485 ] } ], "pattern" : "1" } sort_by : "ASC(last_modified_time)" view_id : "4000000026001"

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" : "Design Review and Approval", "status" : { "id" : "4000000000485", "name" : "Open", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "color" : "#2cc8ba", "priority" : "none", "owners_and_work" : { "work_type" : "standard", "total_work" : "08:00", "unit" : "hours_per_day", "copy_task_duration" : false, "owners" : [ { "zuid" : 27805036, "zpuid" : "4000000002471", "name" : "test", "email" : "admin@zylker.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" : 35, "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" : "admin@zylker.com", "first_name" : "test", "last_name" : "one" }, "billing_type" : "billable", "budget_info" : { "exchange_rate" : 1.0 }, "start" : "2024-12-16T09:00:00.000Z", "end" : "2024-12-19T18:00:00.000Z", "recurrence" : { "trigger_type" : "on_schedule", "retain_config" : { "comments" : true, "billing_type" : false, "followers" : true, "description" : false, "subtasks" : true, "tags" : false, "attachments" : true, "teams" : false }, "date_based" : { "field_name" : "start_date", "ends_after_type" : "count", "skip_type" : "execute", "next_schedule_time" : "2029-06-12T18:30:00.000Z", "scheduler_id" : "4000000140013", "is_completed" : false, "executed_count" : "1", "time_span" : "1", "ends_after_value" : 20, "name" : "recurrence", "repetative_type" : "daily", "status" : "true" } }, "single_line" : " this is a single line", "multi_line" : "this is a multi line", "pick_list" : "option 1", "multi_pick_list" : [ "option 1", "option 2" ], "user_pick_list" : { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, "mupl_sel_user" : [ { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, { "zuid" : 53432945, "zpuid" : "5000000002945", "name" : "Alexander", "email" : "alexander@zylker.com", "first_name" : "Alexander", "last_name" : "Alexander" } ], "date" : "2026-03-12", "date_time" : "2026-03-12T09:00:00+05:30", "check_box" : true, "currency" : { "currency_code" : "USD", "formatted_amount" : "$ 412.34", "amount" : 412.34 }, "percentage" : 1000.0, "number" : 1234567890, "decimal" : 123.22, "formula" : "20", "email" : "admin@zylker.com", "phone" : "+1234567890", "url" : "https://www.zoho.com", "long_url" : "https://www.zoho.com", "lookup_field" : "lookup value", "connect_module_2" : { "id" : "170496000000483214", "value" : "Digital Marketing - Active" } } ] }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

FORBIDDEN HTTP 403

Get Project Tasks

Retrieve all tasks from a specific project. Use this API to list tasks within a project.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number to retrieve.

per_page

int

limit : 1-200
default : 100

Enter the number of tasks to retrieve per page.

JSONObject

Specify the filter criteria to apply to the task list.

sort_by

String

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

  1. id
  2. name
  3. start_date
  4. end_date
  5. completion_percentage
  6. created_time
  7. last_modified_time
  8. created_by
  9. is_completed

view_id

long

Enter the ID of the custom view to apply.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B4000000000485%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28last_modified_time%29&view_id=4000000026001' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"});
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_id", "4000000026001");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_id', '4000000026001');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks")
params = {
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}",
  "sort_by" => "ASC(last_modified_time)",
  "view_id" => "4000000026001"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '4000000026001',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks"

params = {
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}",
    "sort_by": "ASC(last_modified_time)",
    "view_id": "4000000026001"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "4000000026001", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks?page=%s&per_page=%s&\"filter\"=%s&sort_by=%s&view_id=%s", enc_page, enc_per_page, enc_"filter", enc_sort_by, enc_view_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "4000000026001";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "4000000026001", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "4000000026001" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks" "?page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&sort_by=" enc-sort_by "&view_id=" enc-view_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_id", "4000000026001")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B4000000000485%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&sort_by=ASC%28last_modified_time%29&view_id=4000000026001 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_id", "4000000026001");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}',
  'sort_by': 'ASC(last_modified_time)',
  'view_id': '4000000026001'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
"filter" = {"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485]}],"pattern":"1"}
sort_by = "ASC(last_modified_time)"
view_id = "4000000026001"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_id", "4000000026001")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"4000000026001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks?page=%@&per_page=%@&"filter"=%@&sort_by=%@&view_id=%@", encodedPage, encodedPer_page, encoded"filter", encodedSort_by, encodedView_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "4000000026001" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"field_name`":`"status`",`"criteria_condition`":`"contains`",`"value`":[4000000000485]}],`"pattern`":`"1`"}"
    sort_by = "ASC(last_modified_time)"
    view_id = "4000000026001"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks"

params <- list(
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}",
  sort_by = "ASC(last_modified_time)",
  view_id = "4000000026001"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485]}],\"pattern\":\"1\"}"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_id", value: "4000000026001")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" "filter" : { "criteria" : [ { "field_name" : "status", "criteria_condition" : "contains", "value" : [ 4000000000485 ] } ], "pattern" : "1" } sort_by : "ASC(last_modified_time)" view_id : "4000000026001"

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" : "Prepare Sprint Release Notes", "description" : "Compile and review all completed items from the current sprint for the release notes document.", "status" : { "id" : "4000000000485", "name" : "Open", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "color" : "#2cc8ba", "priority" : "none", "owners_and_work" : { "work_type" : "standard", "total_work" : "06:00", "unit" : "hours_per_day", "copy_task_duration" : false, "owners" : [ { "zuid" : 27805036, "zpuid" : "4000000004929", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth", "work_values" : "06:00" } ] }, "duration" : { "value" : "3", "type" : "days" }, "completion_percentage" : 20, "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" : "admin@zylker.com", "first_name" : "test", "last_name" : "one" }, "billing_type" : "billable", "budget_info" : { "exchange_rate" : 85.0 }, "recurrence" : { "trigger_type" : "on_schedule", "retain_config" : { "comments" : true, "billing_type" : false, "followers" : true, "description" : false, "subtasks" : true, "tags" : false, "attachments" : true, "teams" : false }, "date_based" : { "field_name" : "start_date", "ends_after_type" : "count", "skip_type" : "execute", "next_schedule_time" : "2029-06-12T18:30:00.000Z", "scheduler_id" : "4000000140013", "is_completed" : false, "executed_count" : "1", "time_span" : "1", "ends_after_value" : 20, "name" : "recurrence", "repetative_type" : "daily", "status" : "true" } }, "single_line" : " this is a single line", "multi_line" : "this is a multi line", "pick_list" : "option 1", "multi_pick_list" : [ "option 1", "option 2" ], "user_pick_list" : { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, "mupl_sel_user" : [ { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, { "zuid" : 53432945, "zpuid" : "5000000002945", "name" : "Alexander", "email" : "alexander@zylker.com", "first_name" : "Alexander", "last_name" : "Alexander" } ], "date" : "2026-03-12", "date_time" : "2026-03-12T09:00:00+05:30", "check_box" : true, "currency" : { "currency_code" : "USD", "formatted_amount" : "$ 412.34", "amount" : 412.34 }, "percentage" : 1000.0, "number" : 1234567890, "decimal" : 123.22, "formula" : "20", "email" : "admin@zylker.com", "phone" : "+1234567890", "url" : "https://www.zoho.com", "long_url" : "https://www.zoho.com", "lookup_field" : "lookup value", "connect_module_2" : { "id" : "170496000000483214", "value" : "Digital Marketing - Active" } } ] }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

FORBIDDEN HTTP 403

Get Task Details

Retrieve the details of a specific task in a project. Use this API to fetch metadata such as assignee, status, priority, and dates for a given task.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "tasklist" : { "id" : "4000000007001" }, "id" : "4000000023001", "prefix" : "RU1-T9", "name" : "Conduct User Acceptance Testing", "description" : "Execute UAT scenarios for the new dashboard module and document findings for the development team.", "status" : { "id" : "4000000000485", "name" : "Open", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "color" : "#2cc8ba", "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" : "admin@zylker.com", "first_name" : "test", "last_name" : "one", "work_values" : "10:00" } ] }, "duration" : { "value" : "5", "type" : "days" }, "completion_percentage" : 45, "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" : "admin@zylker.com", "first_name" : "test", "last_name" : "one" }, "billing_type" : "billable", "budget_info" : { "exchange_rate" : 85.0 }, "recurrence" : { "trigger_type" : "on_schedule", "retain_config" : { "comments" : true, "billing_type" : false, "followers" : true, "description" : false, "subtasks" : true, "tags" : false, "attachments" : true, "teams" : false }, "date_based" : { "field_name" : "start_date", "ends_after_type" : "count", "skip_type" : "execute", "next_schedule_time" : "2029-06-12T18:30:00.000Z", "scheduler_id" : "4000000140013", "is_completed" : false, "executed_count" : "1", "time_span" : "1", "ends_after_value" : 20, "name" : "recurrence", "repetative_type" : "daily", "status" : "true" } } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

FORBIDDEN HTTP 403

Create Task

Add a new task to a project.

POST

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

OAuth Scope:

ZohoProjects.tasks.CREATE

Parameter

Param Name
Data Type
Description

JSONObject

Enter the task list details.
Uses the general task list when task list details are not provided;
To create one, use the Create Default Task List API.

parental_info

JSONObject

Enter the parent task details to create this task as a subtask.

name

String

required
max length : 10000

Enter the name of the task.

description

String

max length : 80000

Enter the description of the task.

JSONObject

max length : 1000

Enter the status of the task.
Defaults to open if not provided.

priority

String

Specify the priority of the task.
Accepted values: none, low, medium, high

start_date

String

Enter the start date of the task 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

end_date

String

Enter the end date of the task 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

JSONObject

Enter the duration of the task.

completion_percentage

int

Enter the completion percentage of the task.

billing_type

String

Specify the billing type for the task.
Accepted values: none, billable, non_billable

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of the files to attach to the task.

owners_and_work

JSONObject

max length : 100000

Enter the owner and work hour details for the task.

JSONArray

max length : 10000

Enter the tags to associate with the task.

JSONArray

max length : 100000

Enter the teams to associate with the task.

recurrence

JSONObject

Enter the recurrence details for the task.

budget_info

JSONObject

max length : 100000

Enter the budget details for the task.

<field_name>

String

Enter the value for a task custom field. Replace <field_name> with the custom field's API name in snake_case, as listed in the Custom Fields Guide.
Note: The type is shown as String by default since most basic custom fields accept string values. The actual expected value format and input structure depend on the custom field type. Refer to the Custom Fields Guide for details.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks";
params = Map();
params.put("tasklist", {"id":"4000000062001"});
params.put("parental_info", {"parent_task_id":"-"});
params.put("name", "Set Up CI/CD Pipeline for Staging Environment");
params.put("description", "Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.");
params.put("status", {"id":"4000000062001"});
params.put("priority", "-");
params.put("start_date", "2024-12-16T09:00:00.000Z");
params.put("end_date", "2024-12-19T18:00:00.000Z");
params.put("duration", {"value":[4000000000485],"type":"days"});
params.put("completion_percentage", "-");
params.put("billing_type", "-");
params.put("attachments", [4000000094003]);
params.put("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":"-"});
params.put("tags", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("teams", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("recurrence", {"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}});
params.put("budget_info", {"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"});
params.put("<field_name>", "-");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks');

const payload = JSON.stringify({"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"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\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"<field_name>\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks");
request.Content = new StringContent(
    @"{""tasklist"":{""id"":""4000000062001""},""parental_info"":{""parent_task_id"":""-""},""name"":""Set Up CI/CD Pipeline for Staging Environment"",""description"":""Configure and validate the CI/CD pipeline for the staging environment prior to production deployment."",""status"":{""id"":""4000000062001""},""priority"":""-"",""start_date"":""2024-12-16T09:00:00.000Z"",""end_date"":""2024-12-19T18:00:00.000Z"",""duration"":{""value"":[4000000000485],""type"":""days""},""completion_percentage"":""-"",""billing_type"":""-"",""attachments"":[4000000094003],""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"":{""trigger_type"":""-"",""retain_config"":{""comments"":""Test Comment"",""billing_type"":""-"",""followers"":""-"",""description"":""Configure and validate the CI/CD pipeline for the staging environment prior to production deployment."",""subtasks"":""-"",""tags"":""-"",""attachments"":[4000000094003],""teams"":""-""},""date_based"":{""field_name"":""status"",""repetative_type"":""-"",""time_span"":""-"",""ends_after_type"":""-"",""ends_after_value"":""-"",""skip_type"":""-"",""duration_type"":""days"",""no_of_duration"":""2""},""scheduler_based"":{""repetative_type"":""-"",""time_span"":""-"",""ends_after_type"":""-"",""ends_after_value"":""-"",""skip_type"":""-"",""time"":""22:00"",""days_of_week"":""-"",""months_of_year"":""-"",""repeat_on_type"":""-"",""repeat_on_value"":""-""}},""budget_info"":{""rate_per_hour"":""-"",""budget"":""-"",""threshold"":""-"",""revenue_budget"":""-"",""cost_rate_per_hour"":""-""},""<field_name>"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"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\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"<field_name>\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"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\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"<field_name>\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"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\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"<field_name>\":\"-\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI\/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI\/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"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\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI\/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"<field_name>\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"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\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"<field_name>\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"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\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"<field_name>\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"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":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"<field_name>":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "tasklist" : { "id" : "4000000062001" }, "parental_info" : { "parent_task_id" : "-" }, "name" : "Set Up CI/CD Pipeline for Staging Environment", "description" : "Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.", "status" : { "id" : "4000000062001" }, "priority" : "-", "start_date" : "2024-12-16T09:00:00.000Z", "end_date" : "2024-12-19T18:00:00.000Z", "duration" : { "value" : [ 4000000000485 ], "type" : "days" }, "completion_percentage" : "-", "billing_type" : "-", "attachments" : [ 4000000094003 ], "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" : { "trigger_type" : "-", "retain_config" : { "comments" : "Test Comment", "billing_type" : "-", "followers" : "-", "description" : "Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.", "subtasks" : "-", "tags" : "-", "attachments" : [ 4000000094003 ], "teams" : "-" }, "date_based" : { "field_name" : "status", "repetative_type" : "-", "time_span" : "-", "ends_after_type" : "-", "ends_after_value" : "-", "skip_type" : "-", "duration_type" : "days", "no_of_duration" : "2" }, "scheduler_based" : { "repetative_type" : "-", "time_span" : "-", "ends_after_type" : "-", "ends_after_value" : "-", "skip_type" : "-", "time" : "22:00", "days_of_week" : "-", "months_of_year" : "-", "repeat_on_type" : "-", "repeat_on_value" : "-" } }, "budget_info" : { "rate_per_hour" : "-", "budget" : "-", "threshold" : "-", "revenue_budget" : "-", "cost_rate_per_hour" : "-" }, "" : "-" }

Sample Response

201{ "project" : { "id" : "4000000009003", "name" : "Zylker Website Redesign" }, "milestone" : { "id" : "4000000002058", "name" : "Q1 Delivery" }, "tasklist" : { "id" : "4000000009131", "name" : "General" }, "id" : "4000000010011", "prefix" : "CA1-T7", "name" : "Set Up CI/CD Pipeline for Staging Environment", "status" : { "id" : "4000000000497", "name" : "Open", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "priority" : "high", "owners_and_work" : { "work_type" : "standard", "total_work" : "08:00", "unit" : "hours_per_day", "copy_task_duration" : true, "owners" : [ { "zuid" : 27805036, "zpuid" : "4000000006075", "name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "first_name" : "Monica", "last_name" : "Hemsworth", "work_values" : "08:00" } ], "refresh_business_hours" : false }, "duration" : { "value" : "4", "type" : "days" }, "completion_percentage" : 0, "sequence" : { "sequence" : 7 }, "depth" : 0, "created_time" : "2025-12-03T12:08:07.552Z", "last_modified_time" : "2025-12-03T12:08:07.552Z", "is_completed" : false, "created_via" : "api", "created_by" : { "zuid" : 27805036, "zpuid" : "4000000002961", "name" : "s", "email" : "admin@zylker.com", "first_name" : "s", "last_name" : "s" }, "billing_type" : "billable", "log_hours" : { "billable_hours" : "00:00", "non_billable_hours" : "00:00", "total_hours" : "00:00" }, "association_info" : { "has_reminder" : false, "has_recurrence" : false, "has_comments" : false, "has_attachments" : false, "has_forums" : false, "has_subtasks" : false }, "recurrence" : { "trigger_type" : "on_schedule", "retain_config" : { "comments" : true, "billing_type" : false, "followers" : true, "description" : false, "subtasks" : true, "tags" : false, "attachments" : true, "teams" : false }, "date_based" : { "field_name" : "start_date", "ends_after_type" : "count", "skip_type" : "execute", "next_schedule_time" : "2029-06-12T18:30:00.000Z", "scheduler_id" : "4000000140013", "is_completed" : false, "executed_count" : "1", "time_span" : "1", "ends_after_value" : 20, "name" : "recurrence", "repetative_type" : "daily", "status" : "true" } }, "single_line" : " this is a single line", "multi_line" : "this is a multi line", "pick_list" : "option 1", "multi_pick_list" : [ "option 1", "option 2" ], "user_pick_list" : { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, "mupl_sel_user" : [ { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, { "zuid" : 53432945, "zpuid" : "5000000002945", "name" : "Alexander", "email" : "alexander@zylker.com", "first_name" : "Alexander", "last_name" : "Alexander" } ], "date" : "2026-03-12", "date_time" : "2026-03-12T09:00:00+05:30", "check_box" : true, "currency" : { "currency_code" : "USD", "formatted_amount" : "$ 412.34", "amount" : 412.34 }, "percentage" : 1000.0, "number" : 1234567890, "decimal" : 123.22, "formula" : "20", "email" : "admin@zylker.com", "phone" : "+1234567890", "url" : "https://www.zoho.com", "long_url" : "https://www.zoho.com", "lookup_field" : "lookup value", "connect_module_2" : { "id" : "170496000000483214", "value" : "Digital Marketing - Active" } }

Possible Errors

MANDATORY_PARAMETER_MISSING HTTP 400

INVALID_DURATION HTTP 400

INVALID_DATE_RANGE HTTP 400

INVALID_PARAMETER_VALUE HTTP 400

MAXTASKSPERTASKLIST_REACHED HTTP 403

INVALID_CUSTOM_FIELD HTTP 400

INVALID_OWNER HTTP 400

PROJECT_TEMPLATE_SUPPORT HTTP 403

INVALID_TASKLIST HTTP 400

Update 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 to move this task to.

parental_info

JSONObject

Enter the parent task details to convert this task into a subtask.

name

String

max length : 10000

Enter the name of the task.

description

String

max length : 80000

Enter the description of the task.

JSONObject

max length : 1000

Enter the status of the task.
Defaults to open if not provided.

priority

String

Specify the priority of the task.
Accepted values: none, low, medium, high

start_date

String

Enter the start date of the task 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.

end_date

String

Enter the end date of the task 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.

JSONObject

Enter the task duration details.

completion_percentage

int

Enter the completion percentage of the task.

billing_type

String

Specify the billing type for the task.
Accepted values: none, billable, non_billable

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of the files to attach to the task.

owners_and_work

JSONObject

max length : 100000

Enter the owner and work hour details for the task.

JSONArray

max length : 100000
array size : 0-100

Enter the tags to associate with the task.

JSONArray

max length : 100000
array size : 0-100

Enter the teams to associate with the task.

recurrence

JSONObject

Enter the recurrence details for the task. To remove recurrence from the task, pass an empty object.

JSONObject

max length : 100000

Enter the reminder details for the task.

budget_info

JSONObject

max length : 100000

Enter the budget details for the task.

remove_dependency_lag

boolean

default : false

Specify whether to forcefully remove the lag from task dependencies.
Accepted values: true, false

color

String

Enter the color of the task.

<field_name>

String

Enter the value for a task custom field. Replace <field_name> with the custom field's API name in snake_case, as listed in the Custom Fields Guide.
Note: The type is shown as String by default since most basic custom fields accept string values. The actual expected value format and input structure depend on the custom field type. Refer to the Custom Fields Guide for details.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101";
params = Map();
params.put("tasklist", {"id":"4000000062001"});
params.put("parental_info", {"parent_task_id":"-"});
params.put("name", "Set Up CI/CD Pipeline for Staging Environment");
params.put("description", "Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.");
params.put("status", {"id":"4000000062001"});
params.put("priority", "-");
params.put("start_date", "2024-12-16T09:00:00.000Z");
params.put("end_date", "2024-12-19T18:00:00.000Z");
params.put("duration", {"value":[4000000000485],"type":"days"});
params.put("completion_percentage", "-");
params.put("billing_type", "-");
params.put("attachments", [4000000094003]);
params.put("owners_and_work", {"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"});
params.put("tags", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("teams", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}]);
params.put("recurrence", {"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}});
params.put("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":"days","values":"-"}]});
params.put("budget_info", {"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"});
params.put("remove_dependency_lag", "-");
params.put("color", "#67a0ff");
params.put("<field_name>", "-");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101');

const payload = JSON.stringify({"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\",\"refresh_business_hours\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"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\":\"days\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"remove_dependency_lag\":\"-\",\"color\":\"#67a0ff\",\"<field_name>\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");
request.Content = new StringContent(
    @"{""tasklist"":{""id"":""4000000062001""},""parental_info"":{""parent_task_id"":""-""},""name"":""Set Up CI/CD Pipeline for Staging Environment"",""description"":""Configure and validate the CI/CD pipeline for the staging environment prior to production deployment."",""status"":{""id"":""4000000062001""},""priority"":""-"",""start_date"":""2024-12-16T09:00:00.000Z"",""end_date"":""2024-12-19T18:00:00.000Z"",""duration"":{""value"":[4000000000485],""type"":""days""},""completion_percentage"":""-"",""billing_type"":""-"",""attachments"":[4000000094003],""owners_and_work"":{""owners"":[{""add"":[{""zpuid"":""4000000002055"",""work_values"":""-""}],""remove"":[{""zpuid"":""4000000002055""}],""zpuid"":""4000000002055"",""work_values"":""-""}],""work_type"":""-"",""unit"":""days"",""copy_task_duration"":""-"",""refresh_business_hours"":""-""},""tags"":[{""add"":[{""id"":""4000000062001""}],""remove"":[{""id"":""4000000062001""}],""id"":""4000000062001""}],""teams"":[{""add"":[{""id"":""4000000062001""}],""remove"":[{""id"":""4000000062001""}],""id"":""4000000062001""}],""recurrence"":{""trigger_type"":""-"",""retain_config"":{""comments"":""Test Comment"",""billing_type"":""-"",""followers"":""-"",""description"":""Configure and validate the CI/CD pipeline for the staging environment prior to production deployment."",""subtasks"":""-"",""tags"":""-"",""attachments"":[4000000094003],""teams"":""-""},""date_based"":{""field_name"":""status"",""repetative_type"":""-"",""time_span"":""-"",""ends_after_type"":""-"",""ends_after_value"":""-"",""skip_type"":""-"",""duration_type"":""days"",""no_of_duration"":""2""},""scheduler_based"":{""repetative_type"":""-"",""time_span"":""-"",""ends_after_type"":""-"",""ends_after_value"":""-"",""skip_type"":""-"",""time"":""22:00"",""days_of_week"":""-"",""months_of_year"":""-"",""repeat_on_type"":""-"",""repeat_on_value"":""-""}},""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"":""days"",""values"":""-""}]},""budget_info"":{""rate_per_hour"":""-"",""budget"":""-"",""threshold"":""-"",""hourly_budget"":""-"",""hourly_budget_threshold"":""-"",""revenue_budget"":""-"",""cost_rate_per_hour"":""-""},""remove_dependency_lag"":""-"",""color"":""#67a0ff"",""<field_name>"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\",\"refresh_business_hours\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"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\":\"days\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"remove_dependency_lag\":\"-\",\"color\":\"#67a0ff\",\"<field_name>\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\",\"refresh_business_hours\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"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\":\"days\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"remove_dependency_lag\":\"-\",\"color\":\"#67a0ff\",\"<field_name>\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\",\"refresh_business_hours\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"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\":\"days\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"remove_dependency_lag\":\"-\",\"color\":\"#67a0ff\",\"<field_name>\":\"-\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI\/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI\/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\",\"refresh_business_hours\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI\/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"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\":\"days\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"remove_dependency_lag\":\"-\",\"color\":\"#67a0ff\",\"<field_name>\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\",\"refresh_business_hours\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"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\":\"days\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"remove_dependency_lag\":\"-\",\"color\":\"#67a0ff\",\"<field_name>\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"tasklist\":{\"id\":\"4000000062001\"},\"parental_info\":{\"parent_task_id\":\"-\"},\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"status\":{\"id\":\"4000000062001\"},\"priority\":\"-\",\"start_date\":\"2024-12-16T09:00:00.000Z\",\"end_date\":\"2024-12-19T18:00:00.000Z\",\"duration\":{\"value\":[4000000000485],\"type\":\"days\"},\"completion_percentage\":\"-\",\"billing_type\":\"-\",\"attachments\":[4000000094003],\"owners_and_work\":{\"owners\":[{\"add\":[{\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\",\"work_values\":\"-\"}],\"work_type\":\"-\",\"unit\":\"days\",\"copy_task_duration\":\"-\",\"refresh_business_hours\":\"-\"},\"tags\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"teams\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}],\"id\":\"4000000062001\"}],\"recurrence\":{\"trigger_type\":\"-\",\"retain_config\":{\"comments\":\"Test Comment\",\"billing_type\":\"-\",\"followers\":\"-\",\"description\":\"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.\",\"subtasks\":\"-\",\"tags\":\"-\",\"attachments\":[4000000094003],\"teams\":\"-\"},\"date_based\":{\"field_name\":\"status\",\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"duration_type\":\"days\",\"no_of_duration\":\"2\"},\"scheduler_based\":{\"repetative_type\":\"-\",\"time_span\":\"-\",\"ends_after_type\":\"-\",\"ends_after_value\":\"-\",\"skip_type\":\"-\",\"time\":\"22:00\",\"days_of_week\":\"-\",\"months_of_year\":\"-\",\"repeat_on_type\":\"-\",\"repeat_on_value\":\"-\"}},\"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\":\"days\",\"values\":\"-\"}]},\"budget_info\":{\"rate_per_hour\":\"-\",\"budget\":\"-\",\"threshold\":\"-\",\"hourly_budget\":\"-\",\"hourly_budget_threshold\":\"-\",\"revenue_budget\":\"-\",\"cost_rate_per_hour\":\"-\"},\"remove_dependency_lag\":\"-\",\"color\":\"#67a0ff\",\"<field_name>\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"tasklist":{"id":"4000000062001"},"parental_info":{"parent_task_id":"-"},"name":"Set Up CI/CD Pipeline for Staging Environment","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","status":{"id":"4000000062001"},"priority":"-","start_date":"2024-12-16T09:00:00.000Z","end_date":"2024-12-19T18:00:00.000Z","duration":{"value":[4000000000485],"type":"days"},"completion_percentage":"-","billing_type":"-","attachments":[4000000094003],"owners_and_work":{"owners":[{"add":[{"zpuid":"4000000002055","work_values":"-"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055","work_values":"-"}],"work_type":"-","unit":"days","copy_task_duration":"-","refresh_business_hours":"-"},"tags":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"teams":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}],"id":"4000000062001"}],"recurrence":{"trigger_type":"-","retain_config":{"comments":"Test Comment","billing_type":"-","followers":"-","description":"Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.","subtasks":"-","tags":"-","attachments":[4000000094003],"teams":"-"},"date_based":{"field_name":"status","repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","duration_type":"days","no_of_duration":"2"},"scheduler_based":{"repetative_type":"-","time_span":"-","ends_after_type":"-","ends_after_value":"-","skip_type":"-","time":"22:00","days_of_week":"-","months_of_year":"-","repeat_on_type":"-","repeat_on_value":"-"}},"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":"days","values":"-"}]},"budget_info":{"rate_per_hour":"-","budget":"-","threshold":"-","hourly_budget":"-","hourly_budget_threshold":"-","revenue_budget":"-","cost_rate_per_hour":"-"},"remove_dependency_lag":"-","color":"#67a0ff","<field_name>":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "tasklist" : { "id" : "4000000062001" }, "parental_info" : { "parent_task_id" : "-" }, "name" : "Set Up CI/CD Pipeline for Staging Environment", "description" : "Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.", "status" : { "id" : "4000000062001" }, "priority" : "-", "start_date" : "2024-12-16T09:00:00.000Z", "end_date" : "2024-12-19T18:00:00.000Z", "duration" : { "value" : [ 4000000000485 ], "type" : "days" }, "completion_percentage" : "-", "billing_type" : "-", "attachments" : [ 4000000094003 ], "owners_and_work" : { "owners" : [ { "add" : [ { "zpuid" : "4000000002055", "work_values" : "-" } ], "remove" : [ { "zpuid" : "4000000002055" } ], "zpuid" : "4000000002055", "work_values" : "-" } ], "work_type" : "-", "unit" : "days", "copy_task_duration" : "-", "refresh_business_hours" : "-" }, "tags" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "teams" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ], "id" : "4000000062001" } ], "recurrence" : { "trigger_type" : "-", "retain_config" : { "comments" : "Test Comment", "billing_type" : "-", "followers" : "-", "description" : "Configure and validate the CI/CD pipeline for the staging environment prior to production deployment.", "subtasks" : "-", "tags" : "-", "attachments" : [ 4000000094003 ], "teams" : "-" }, "date_based" : { "field_name" : "status", "repetative_type" : "-", "time_span" : "-", "ends_after_type" : "-", "ends_after_value" : "-", "skip_type" : "-", "duration_type" : "days", "no_of_duration" : "2" }, "scheduler_based" : { "repetative_type" : "-", "time_span" : "-", "ends_after_type" : "-", "ends_after_value" : "-", "skip_type" : "-", "time" : "22:00", "days_of_week" : "-", "months_of_year" : "-", "repeat_on_type" : "-", "repeat_on_value" : "-" } }, "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" : "days", "values" : "-" } ] }, "budget_info" : { "rate_per_hour" : "-", "budget" : "-", "threshold" : "-", "hourly_budget" : "-", "hourly_budget_threshold" : "-", "revenue_budget" : "-", "cost_rate_per_hour" : "-" }, "remove_dependency_lag" : "-", "color" : "#67a0ff", "" : "-" }

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" : "admin@zylker.com", "zuid" : 22824487 } ] }, "description" : "human-resource", "color" : "#74cb80", "priority" : "none", "is_completed" : "false", "created_by" : { "zpuid" : "18000000002379", "name" : "test_one", "last_name" : "one. ½.²", "first_name" : "test? ? ?,?@!$&([]-+/:'~?, ?", "email" : "admin@zylker.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" : "#74cb80", "color_hexcode" : "#74cb80", "name" : "Open", "id" : "18000000000476" }, "start_date" : "2024-10-01T03:30:00.000Z", "recurrence" : { "trigger_type" : "on_schedule", "retain_config" : { "comments" : true, "billing_type" : false, "followers" : true, "description" : false, "subtasks" : true, "tags" : false, "attachments" : true, "teams" : false }, "date_based" : { "field_name" : "start_date", "ends_after_type" : "count", "skip_type" : "execute", "next_schedule_time" : "2029-06-12T18:30:00.000Z", "scheduler_id" : "4000000140013", "is_completed" : false, "executed_count" : "1", "time_span" : "1", "ends_after_value" : 20, "name" : "recurrence", "repetative_type" : "daily", "status" : "true" } }, "single_line" : " this is a single line", "multi_line" : "this is a multi line", "pick_list" : "option 1", "multi_pick_list" : [ "option 1", "option 2" ], "user_pick_list" : { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, "mupl_sel_user" : [ { "zuid" : 45524228, "zpuid" : "4000000002961", "name" : "chris", "email" : "chris@zylker.com", "first_name" : "chris", "last_name" : "chris" }, { "zuid" : 53432945, "zpuid" : "5000000002945", "name" : "Alexander", "email" : "alexander@zylker.com", "first_name" : "Alexander", "last_name" : "Alexander" } ], "date" : "2026-03-12", "date_time" : "2026-03-12T09:00:00+05:30", "check_box" : true, "currency" : { "currency_code" : "USD", "formatted_amount" : "$ 412.34", "amount" : 412.34 }, "percentage" : 1000.0, "number" : 1234567890, "decimal" : 123.22, "formula" : "20", "email" : "admin@zylker.com", "phone" : "+1234567890", "url" : "https://www.zoho.com", "long_url" : "https://www.zoho.com", "lookup_field" : "lookup value", "connect_module_2" : { "id" : "170496000000483214", "value" : "Digital Marketing - Active" } }

Possible Errors

INVALID_STATUS HTTP 400

MANDATORY_PARAMETER_MISSING HTTP 400

OPENED_TASK_CANNOT_UPDATE_COMPLETED_DATE HTTP 403

INVALID_DATE_RANGE HTTP 400

CANNOT_CLOSE_TASK HTTP 409

RESOURCE_NOT_FOUND HTTP 404

INVALID_COMPLETION_PERCENTAGE HTTP 400

INVALID_OWNER HTTP 400

CANNOT_OPEN_CHILD_TASK HTTP 409

FIELD_PERMISSION_DENIED HTTP 403

Delete Task

Remove a task from the project permanently.

DELETE

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

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

Clone Task

Clone a task to create multiple instances within the project.

POST

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

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'no_of_instances = "1"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone";
params = Map();
params.put("no_of_instances", "1");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone');
url.searchParams.append('no_of_instances', '1');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone")
params = {
  "no_of_instances" => "1"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'no_of_instances' => '1',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone"

params = {
    "no_of_instances": "1"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_no_of_instances = curl_easy_escape(curl, "1", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone?no_of_instances=%s", enc_no_of_instances);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_no_of_instances);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["no_of_instances"] = "1";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_no_of_instances = curl_easy_escape(curl, "1", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone";
        url += "?no_of_instances=" + std::string(enc_no_of_instances);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_no_of_instances);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-no_of_instances (java.net.URLEncoder/encode "1" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone" "?no_of_instances=" enc-no_of_instances)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone", nil)
    q := req.URL.Query()
    q.Add("no_of_instances", "1")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone?no_of_instances=1 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/clone");
uriBuilder.addParameter("no_of_instances", "1");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone';

const params = new URLSearchParams({
  'no_of_instances': '1'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
no_of_instances = "1"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("no_of_instances", "1")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedNo_of_instances = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone?no_of_instances=%@", encodedNo_of_instances];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_no_of_instances = Uri.pct_encode "1" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone" ^ "?no_of_instances=" ^ enc_no_of_instances) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    no_of_instances = "1"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone"

params <- list(
  no_of_instances = "1"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/clone")!
components.queryItems = [
    URLQueryItem(name: "no_of_instances", value: "1")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

no_of_instances : "1"

Sample Response

200{ "tasks" : [ { "id" : "170496000000840019" } ] }

Possible Errors

CANT_COPY_SUBTASK HTTP 403

Move Task

Move a task to a different task list within 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 ID of the destination task list.

status_mapping

JSONArray

Enter the status mapping details to apply when moving the task to the destination task list.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move";
params = Map();
params.put("target_tasklist_id", "-");
params.put("status_mapping", [{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move');

const payload = JSON.stringify({"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"}}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move");
request.Content = new StringContent(
    @"{""target_tasklist_id"":""-"",""status_mapping"":[{""old_status"":{""id"":""4000000062001"",""name"":""Set Up CI/CD Pipeline for Staging Environment"",""color"":""#67a0ff"",""type"":""days""},""new_status"":{""id"":""4000000062001"",""name"":""Set Up CI/CD Pipeline for Staging Environment"",""color"":""#67a0ff"",""type"":""days""}}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"}}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"}}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"}}]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI\/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI\/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"}}]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"}}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"target_tasklist_id\":\"-\",\"status_mapping\":[{\"old_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"},\"new_status\":{\"id\":\"4000000062001\",\"name\":\"Set Up CI/CD Pipeline for Staging Environment\",\"color\":\"#67a0ff\",\"type\":\"days\"}}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/move")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"target_tasklist_id":"-","status_mapping":[{"old_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"},"new_status":{"id":"4000000062001","name":"Set Up CI/CD Pipeline for Staging Environment","color":"#67a0ff","type":"days"}}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "target_tasklist_id" : "-", "status_mapping" : [ { "old_status" : { "id" : "4000000062001", "name" : "Set Up CI/CD Pipeline for Staging Environment", "color" : "#67a0ff", "type" : "days" }, "new_status" : { "id" : "4000000062001", "name" : "Set Up CI/CD Pipeline for Staging Environment", "color" : "#67a0ff", "type" : "days" } } ] }

Sample Response

204 No Content
Reorder Tasks

Update the order of tasks within a task list.

POST

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

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
before

long

Enter the ID of the task before which this task should be placed. Provide only one of before, after, or position.

after

long

Enter the ID of the task after which this task should be placed. Provide only one of before, after, or position.

position

String

Relative placement of the task within the task list. Accepted values: first or last. Ignored if before or after is specified (those take precedence). Applies only to top-level tasks; has no effect on subtasks. If none of before, after, or position are specified, the task retains its current position.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder";
params = Map();
params.put("before", "1752587000000097101");
params.put("after", "1752587000000097101");
params.put("position", "first");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder');

const payload = JSON.stringify({"before":"1752587000000097101","after":"1752587000000097101","position":"first"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"before\":\"1752587000000097101\",\"after\":\"1752587000000097101\",\"position\":\"first\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder");
request.Content = new StringContent(
    @"{""before"":""1752587000000097101"",""after"":""1752587000000097101"",""position"":""first""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"before\":\"1752587000000097101\",\"after\":\"1752587000000097101\",\"position\":\"first\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"before\":\"1752587000000097101\",\"after\":\"1752587000000097101\",\"position\":\"first\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"before\":\"1752587000000097101\",\"after\":\"1752587000000097101\",\"position\":\"first\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/reorder");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"before\":\"1752587000000097101\",\"after\":\"1752587000000097101\",\"position\":\"first\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"before":"1752587000000097101","after":"1752587000000097101","position":"first"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"before\":\"1752587000000097101\",\"after\":\"1752587000000097101\",\"position\":\"first\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"before\":\"1752587000000097101\",\"after\":\"1752587000000097101\",\"position\":\"first\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/reorder")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"before":"1752587000000097101","after":"1752587000000097101","position":"first"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "before" : "1752587000000097101", "after" : "1752587000000097101", "position" : "first" }

Sample Response

204 No Content
Get Task Count

Retrieve the total number of tasks in a project.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
view_id

String

Enter the ID of the custom view to apply.

JSONObject

Specify the filter criteria to apply to the task count.

criteria

String

Enter the filter criteria as a criteria string.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count?view_id=4000000026001&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B4000000000485%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22status%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%2C%22is_this_today%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&criteria=-' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count";
params = Map();
params.put("view_id", "4000000026001");
params.put("filter", {"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485],"relative_columns":[{"cfid":"4000000000242","field_name":"status","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1"});
params.put("criteria", "-");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count');
url.searchParams.append('view_id', '4000000026001');
url.searchParams.append('"filter"', '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485],"relative_columns":[{"cfid":"4000000000242","field_name":"status","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1"}');
url.searchParams.append('criteria', '-');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count")
params = {
  "view_id" => "4000000026001",
  ""filter"" => "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}",
  "criteria" => "-"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'view_id' => '4000000026001',
    '"filter"' => '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485],"relative_columns":[{"cfid":"4000000000242","field_name":"status","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1"}',
    'criteria' => '-',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count"

params = {
    "view_id": "4000000026001",
    ""filter"": "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}",
    "criteria": "-"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_view_id = curl_easy_escape(curl, "4000000026001", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}", 0);
        char *enc_criteria = curl_easy_escape(curl, "-", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count?view_id=%s&\"filter\"=%s&criteria=%s", enc_view_id, enc_"filter", enc_criteria);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_view_id);
        curl_free(enc_"filter");
        curl_free(enc_criteria);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["view_id"] = "4000000026001";
query[""filter""] = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}";
query["criteria"] = "-";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_view_id = curl_easy_escape(curl, "4000000026001", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}", 0);
        char* enc_criteria = curl_easy_escape(curl, "-", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count";
        url += "?view_id=" + std::string(enc_view_id);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&criteria=" + std::string(enc_criteria);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_view_id);
        curl_free(enc_"filter");
        curl_free(enc_criteria);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-view_id (java.net.URLEncoder/encode "4000000026001" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}" "UTF-8")
      enc-criteria (java.net.URLEncoder/encode "-" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count" "?view_id=" enc-view_id "&"filter"=" enc-"filter" "&criteria=" enc-criteria)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count", nil)
    q := req.URL.Query()
    q.Add("view_id", "4000000026001")
    q.Add(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}")
    q.Add("criteria", "-")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count?view_id=4000000026001&%22filter%22=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22status%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B4000000000485%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22status%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%2C%22is_this_today%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221%22%7D&criteria=- HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/count");
uriBuilder.addParameter("view_id", "4000000026001");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}");
uriBuilder.addParameter("criteria", "-");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count';

const params = new URLSearchParams({
  'view_id': '4000000026001',
  '"filter"': '{"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485],"relative_columns":[{"cfid":"4000000000242","field_name":"status","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1"}',
  'criteria': '-'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
view_id = "4000000026001"
"filter" = {"criteria":[{"field_name":"status","criteria_condition":"contains","value":[4000000000485],"relative_columns":[{"cfid":"4000000000242","field_name":"status","offset":"1","unit":"days","prior":"before","is_this_today":"-"}]}],"pattern":"1"}
criteria =  - 
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("view_id", "4000000026001")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}")
    urlBuilder.addQueryParameter("criteria", "-")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedView_id = [@"4000000026001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedCriteria = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count?view_id=%@&"filter"=%@&criteria=%@", encodedView_id, encoded"filter", encodedCriteria];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_view_id = Uri.pct_encode "4000000026001" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}" in
  let enc_criteria = Uri.pct_encode "-" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count" ^ "?view_id=" ^ enc_view_id ^ "&"filter"=" ^ enc_"filter" ^ "&criteria=" ^ enc_criteria) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    view_id = "4000000026001"
    "filter" = "{`"criteria`":[{`"field_name`":`"status`",`"criteria_condition`":`"contains`",`"value`":[4000000000485],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"field_name`":`"status`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`",`"is_this_today`":`"-`"}]}],`"pattern`":`"1`"}"
    criteria = "-"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count"

params <- list(
  view_id = "4000000026001",
  "filter" = "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}",
  criteria = "-"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/count")!
components.queryItems = [
    URLQueryItem(name: "view_id", value: "4000000026001"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"field_name\":\"status\",\"criteria_condition\":\"contains\",\"value\":[4000000000485],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"status\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":\"-\"}]}],\"pattern\":\"1\"}"),
    URLQueryItem(name: "criteria", value: "-")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

view_id : "4000000026001" "filter" : { "criteria" : [ { "field_name" : "status", "criteria_condition" : "contains", "value" : [ 4000000000485 ], "relative_columns" : [ { "cfid" : "4000000000242", "field_name" : "status", "offset" : "1", "unit" : "days", "prior" : "before", "is_this_today" : "-" } ] } ], "pattern" : "1" } criteria : -

Sample Response

200{ "task_count" : "1001" }
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 Followers

Retrieve the list of 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

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

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

Follow a task to receive updates and notifications.

POST

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

OAuth Scope:

ZohoProjects.tasks.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/follow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

201{ "followers" : { "zpuid" : "4000000002055", "name" : "mark", "last_name" : "justin", "first_name" : "mark", "email" : "mark.justin@zylker.com", "zuid" : "16469208" } }
Add Followers

Add one or more 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"followers":[{"zpuid":"4000000002055"}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers";
params = Map();
params.put("followers", [{"zpuid":"4000000002055"}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers');

const payload = JSON.stringify({"followers":[{"zpuid":"4000000002055"}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"followers":[{"zpuid":"4000000002055"}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"followers":[{"zpuid":"4000000002055"}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"followers":[{"zpuid":"4000000002055"}]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"followers\":[{\"zpuid\":\"4000000002055\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers");
request.Content = new StringContent(
    @"{""followers"":[{""zpuid"":""4000000002055""}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"followers\":[{\"zpuid\":\"4000000002055\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"followers\":[{\"zpuid\":\"4000000002055\"}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"followers\":[{\"zpuid\":\"4000000002055\"}]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"followers\":[{\"zpuid\":\"4000000002055\"}]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"followers":[{"zpuid":"4000000002055"}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"followers":[{"zpuid":"4000000002055"}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"followers":[{"zpuid":"4000000002055"}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"followers\":[{\"zpuid\":\"4000000002055\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"followers":[{"zpuid":"4000000002055"}]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"followers":[{"zpuid":"4000000002055"}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"followers\":[{\"zpuid\":\"4000000002055\"}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/followers")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"followers":[{"zpuid":"4000000002055"}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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@zylker.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 Task

Unfollow a task to unsubscribe from its updates.

POST

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

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/unfollow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 all comments from a task. Use this API to fetch the full comment history of a task for review or display.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

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) .
Available fields :

  1. created_time
  2. updated_time

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments?page=%s&per_page=%s&sort_by=%s", enc_page, enc_per_page, enc_sort_by);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments?page=%@&per_page=%@&sort_by=%@", encodedPage, encodedPer_page, encodedSort_by];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_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" : "Monica Hemsworth", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "admin@zylker.com" }, "comment" : "
The task completion criteria have been updated to include code review and QA sign-off. Please ensure all checklist items are addressed before marking this task as complete.
", "id" : "4000000040001", "created_by" : { "zpuid" : "4000000002471", "full_name" : "Monica Hemsworth", "name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "27805036", "is_client_user" : false, "first_name" : "test", "email" : "admin@zylker.com" }, "desk_id" : "-1" } ], "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 } }
Add Comment

Add a new comment to a task. Use this API to post remarks, feedback, or updates on a task to keep collaborators informed.

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 content of the comment.

attachments

JSONArray

max length : 10000
array size : 0-10

Enter the IDs of the files to attach to the comment. You can use this API to upload attachments and get the attachment IDs.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments";
params = Map();
params.put("comment", "Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.");
params.put("attachments", [4000000094003]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments');

const payload = JSON.stringify({"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments");
request.Content = new StringContent(
    @"{""comment"":""Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD."",""attachments"":[4000000094003]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "comment" : "Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.", "attachments" : [ 4000000094003 ] }

Sample Response

201[ { "id" : "4000000025025", "comment" : "
Initial review completed. Please update the task with the latest test results and flag any blockers before the next standup.
", "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" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" }, "sprints_id" : "-1", "desk_id" : "-1", "crm_id" : "-1" } ]
Update Comment

Modify an existing comment on 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. You can use this API to upload attachments and get the attachment IDs.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046";
params = Map();
params.put("comment", "Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.");
params.put("attachments", [4000000094003]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046');

const payload = JSON.stringify({"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""comment"":""Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD."",""attachments"":[4000000094003]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"comment\":\"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.\",\"attachments\":[4000000094003]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"comment":"Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.","attachments":[4000000094003]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "comment" : "Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.", "attachments" : [ 4000000094003 ] }

Sample Response

200[ { "id" : "4000000025001", "comment" : "
Updated the task scope to include integration testing. Please review the revised checklist and share your feedback by EOD.
", "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" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" }, "updated_by" : { "id" : "27805036", "zpuid" : "4000000002471", "name" : "test", "email" : "admin@zylker.com", "is_client_user" : false, "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth" }, "sprints_id" : "-1", "desk_id" : "-1", "crm_id" : "-1" } ]
Delete Comment

Remove a comment from a task permanently.

DELETE

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

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Bug Association

This module covers operations related to task bug association within Zoho Projects. Use this API to retrieve, associate and disassociate Bugs in a Task .

Get Associated Issues

Retrieve all issues associated with a task.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/associated-bugs

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/associated-bugs");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associated-bugs")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "associated_bugs" : [ { "issue" : { "assignee_zpuid" : "4000000004929", "status_id" : "4000000002554", "status_name" : "Open", "name" : "q", "id" : "4000000150180", "assignee" : "Unassigned User", "key" : "1" }, "prefix" : "RU1-I", "project" : { "id" : "4000000006007" } } ] }
Associate Issues

Link one or more issues to a task.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/associate-bugs

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
bug_ids

JSONArray

required

Enter the IDs of the bugs to associate with the task.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'bug_ids = "[ 1752587000000094001 ]"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs";
params = Map();
params.put("bug_ids", "[ 1752587000000094001 ]");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs');
url.searchParams.append('bug_ids', '[ 1752587000000094001 ]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs")
params = {
  "bug_ids" => "[ 1752587000000094001 ]"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'bug_ids' => '[ 1752587000000094001 ]',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs"

params = {
    "bug_ids": "[ 1752587000000094001 ]"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_bug_ids = curl_easy_escape(curl, "[ 1752587000000094001 ]", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs?bug_ids=%s", enc_bug_ids);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_bug_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["bug_ids"] = "[ 1752587000000094001 ]";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_bug_ids = curl_easy_escape(curl, "[ 1752587000000094001 ]", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs";
        url += "?bug_ids=" + std::string(enc_bug_ids);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_bug_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-bug_ids (java.net.URLEncoder/encode "[ 1752587000000094001 ]" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs" "?bug_ids=" enc-bug_ids)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs", nil)
    q := req.URL.Query()
    q.Add("bug_ids", "[ 1752587000000094001 ]")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs?bug_ids=%5B+1752587000000094001+%5D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/associate-bugs");
uriBuilder.addParameter("bug_ids", "[ 1752587000000094001 ]");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs';

const params = new URLSearchParams({
  'bug_ids': '[ 1752587000000094001 ]'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
bug_ids = "[ 1752587000000094001 ]"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("bug_ids", "[ 1752587000000094001 ]")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedBug_ids = [@"[ 1752587000000094001 ]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs?bug_ids=%@", encodedBug_ids];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_bug_ids = Uri.pct_encode "[ 1752587000000094001 ]" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs" ^ "?bug_ids=" ^ enc_bug_ids) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    bug_ids = "[ 1752587000000094001 ]"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs"

params <- list(
  bug_ids = "[ 1752587000000094001 ]"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-bugs")!
components.queryItems = [
    URLQueryItem(name: "bug_ids", value: "[ 1752587000000094001 ]")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

bug_ids : "[ 1752587000000094001 ]"

Sample Response

200{ "is_task_bug_mapped" : true }
Disassociate Issue

Disassociate an issue from a task

DELETE

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

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/bug/1752587000000097233");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/bug/1752587000000097233")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content

Possible Errors

FORBIDDEN HTTP 403

Forum Association

This module covers operations related to task forum association within Zoho Projects. Use this API to retrieve, associate and disassociate forum in a Task .

Get Forums

Retrieve all forums associated with a task.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

Enter the page number to retrieve.

per_page

int

Enter the number of entries to display per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/forums");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/forums")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "forums" : [ { "comment_count" : 3, "created_time" : "2025-07-23T14:12:58.832Z", "flag" : "internal", "last_modified_time" : "2025-07-23T14:12:58.830Z", "mail_to" : "yLFo4wCk8671x6700kx6700p@zylker.com", "link" : { "self_url" : "https://projectsapi.zoho.com/restapi/portal/38154871/projects/5000000005613/forums/5000000010592" }, "last_modified_by" : { "zpuid" : "5000000002641", "full_name" : "Alex", "business_hours_id" : "5000000005272", "name" : "Alex Nash", "last_name" : "Nash", "id" : "38153456", "is_client_user" : false, "first_name" : "Alex", "email" : "alex.nash@zylker.com" }, "type" : "normal", "is_sticky_post" : false, "title" : "Discussion on Q3 Deliverables", "content" : "
Please review the updated task breakdown for Q3 deliverables and share your inputs by end of week.
", "task_count" : 4, "last_activity_time" : "2025-07-23T14:12:58.830Z", "added_via" : "WEB", "project_id" : "5000000005613", "is_announcement_post" : false, "followers_count" : 5, "posted_by" : { "zpuid" : "5000000002641", "full_name" : "Alex Nash", "business_hours_id" : "5000000005272", "name" : "Alex Nash", "last_name" : "Nash", "id" : "38153456", "is_client_user" : false, "first_name" : "Alex", "email" : "alex.nash@zylker.com" }, "id" : "5000000010592", "category" : { "name" : "Project Updates", "id" : "5000000005622" } } ], "page_info" : { "per_page" : "25", "has_next_page" : "false", "page" : "1" } }
Associate Forums

Link one or more forums to a task. Use this API to connect relevant forum discussions to a task.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/associate-forums

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
forums

JSONArray

max length : 10000
array size : 0-100

Enter the IDs of the forums

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"forums":["23806000074760021"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums";
params = Map();
params.put("forums", ["23806000074760021"]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums');

const payload = JSON.stringify({"forums":["23806000074760021"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"forums":["23806000074760021"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"forums":["23806000074760021"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"forums":["23806000074760021"]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"forums\":[\"23806000074760021\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums");
request.Content = new StringContent(
    @"{""forums"":[""23806000074760021""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"forums\":[\"23806000074760021\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"forums\":[\"23806000074760021\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"forums\":[\"23806000074760021\"]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"forums":["23806000074760021"]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/associate-forums");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"forums\":[\"23806000074760021\"]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"forums":["23806000074760021"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"forums":["23806000074760021"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"forums":["23806000074760021"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"forums\":[\"23806000074760021\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"forums":["23806000074760021"]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"forums":["23806000074760021"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"forums\":[\"23806000074760021\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"forums":["23806000074760021"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "forums" : [ "23806000074760021" ] }

Sample Response

204 No Content
Disassociate Forums

Disassociate one or more forums from a task.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/associate-forums

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
forums

JSONArray

max length : 10000
array size : 0-100

Enter the IDs of the forums

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"forums":["23806000074760021"]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums";
params = Map();
params.put("forums", ["23806000074760021"]);
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums');

const payload = JSON.stringify({"forums":["23806000074760021"]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"forums":["23806000074760021"]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => '{"forums":["23806000074760021"]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"forums":["23806000074760021"]}'

response = requests.delete(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"forums\":[\"23806000074760021\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums");
request.Content = new StringContent(
    @"{""forums"":[""23806000074760021""]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"forums\":[\"23806000074760021\"]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"forums\":[\"23806000074760021\"]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"forums\":[\"23806000074760021\"]}")
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"forums":["23806000074760021"]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/associate-forums");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"forums":["23806000074760021"]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"forums":["23806000074760021"]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"forums":["23806000074760021"]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"forums\":[\"23806000074760021\"]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"forums":["23806000074760021"]}|json} in
  Lwt_main.run (
    Client.delete ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"forums":["23806000074760021"]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums" -Method DELETE -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"forums\":[\"23806000074760021\"]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/associate-forums")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"forums":["23806000074760021"]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "forums" : [ "23806000074760021" ] }

Sample Response

204 No Content
Task Dependency

This module covers operations related to task dependencies within Zoho Projects. Use this API to add, update or delete dependencies for tasks.

Add Task Dependency

Create a dependency between two tasks in a project.

POST

/api/v3/portal/[PORTALID]/project/[PROJECTID]/tasks/dependency

OAuth Scope:

ZohoProjects.tasks.READ

Parameter

Param Name
Data Type
Description
predecessor_task

JSONObject

required

Enter the details of the predecessor task.

successor_task

JSONObject

required

Enter the details of the successor task.

dependency_type

String

Specify the type of dependency between the tasks.
Accepted values: FS, FF, SF, SS, AutoSet

link_type

String

Specify the dependency link type.
Accepted values: 0 for Hard Link, 1 for Soft Link

JSONObject

Enter the lag details to apply between the predecessor and successor tasks.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency";
params = Map();
params.put("predecessor_task", {"id":"4000000062001"});
params.put("successor_task", {"id":"4000000062001"});
params.put("dependency_type", "-");
params.put("link_type", "-");
params.put("lag", {"value":[4000000000485],"type":"days"});
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency');

const payload = JSON.stringify({"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
request.Content = new StringContent(
    @"{""predecessor_task"":{""id"":""4000000062001""},""successor_task"":{""id"":""4000000062001""},""dependency_type"":""-"",""link_type"":""-"",""lag"":{""value"":[4000000000485],""type"":""days""}}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/1752587000000097024/tasks/dependency");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "predecessor_task" : { "id" : "4000000062001" }, "successor_task" : { "id" : "4000000062001" }, "dependency_type" : "-", "link_type" : "-", "lag" : { "value" : [ 4000000000485 ], "type" : "days" } }

Sample Response

200{ "predecessor_task" : { "id" : 5000000025251 }, "lag" : { "type" : "hrs", "value" : "1.5" }, "dependency_type" : "FF", "successor_task" : { "id" : 5000000025361 } }
Update Dependency

Modify the dependency between tasks in a project.

PATCH

/api/v3/portal/[PORTALID]/project/[PROJECTID]/tasks/dependency

OAuth Scope:

ZohoProjects.tasks.READ

Parameter

Param Name
Data Type
Description
predecessor_task

JSONObject

required

Enter the details of the predecessor task.

successor_task

JSONObject

required

Enter the details of the successor task.

dependency_type

String

Specify the type of dependency between the tasks.
Accepted values: FS, FF, SF, SS, AutoSet

link_type

String

Specify the dependency link type.
Accepted values: 0 for Hard Link, 1 for Soft Link

JSONObject

Enter the lag details to apply between the predecessor and successor tasks.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency";
params = Map();
params.put("predecessor_task", {"id":"4000000062001"});
params.put("successor_task", {"id":"4000000062001"});
params.put("dependency_type", "-");
params.put("link_type", "-");
params.put("lag", {"value":[4000000000485],"type":"days"});
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency');

const payload = JSON.stringify({"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
request.Content = new StringContent(
    @"{""predecessor_task"":{""id"":""4000000062001""},""successor_task"":{""id"":""4000000062001""},""dependency_type"":""-"",""link_type"":""-"",""lag"":{""value"":[4000000000485],""type"":""days""}}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/1752587000000097024/tasks/dependency");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "predecessor_task" : { "id" : "4000000062001" }, "successor_task" : { "id" : "4000000062001" }, "dependency_type" : "-", "link_type" : "-", "lag" : { "value" : [ 4000000000485 ], "type" : "days" } }

Sample Response

200{ "predecessor_task" : { "id" : 5000000025251 }, "lag" : { "type" : "hrs", "value" : "1.75" }, "dependency_type" : "SS", "successor_task" : { "id" : 5000000025361 } }
Delete Dependency

Remove a task dependency between tasks in a project.

DELETE

/api/v3/portal/[PORTALID]/project/[PROJECTID]/tasks/dependency

OAuth Scope:

ZohoProjects.tasks.READ

Parameter

Param Name
Data Type
Description
predecessor_task

JSONObject

required

Enter the predecessor task details.

successor_task

JSONObject

required

Enter the successor task details.

dependency_type

String

Specify the dependency type. Accepted values: FS, FF, SF or SS.

link_type

String

Specify the dependency link type. Accepted values: 0 - Hard Link or 1 - Soft Link.

JSONObject

Enter the lag details.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency";
params = Map();
params.put("predecessor_task", {"id":"4000000062001"});
params.put("successor_task", {"id":"4000000062001"});
params.put("dependency_type", "-");
params.put("link_type", "-");
params.put("lag", {"value":[4000000000485],"type":"days"});
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency');

const payload = JSON.stringify({"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}'

response = requests.delete(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
request.Content = new StringContent(
    @"{""predecessor_task"":{""id"":""4000000062001""},""successor_task"":{""id"":""4000000062001""},""dependency_type"":""-"",""link_type"":""-"",""lag"":{""value"":[4000000000485],""type"":""days""}}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}")
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/1752587000000097024/tasks/dependency");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}|json} in
  Lwt_main.run (
    Client.delete ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency" -Method DELETE -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"predecessor_task\":{\"id\":\"4000000062001\"},\"successor_task\":{\"id\":\"4000000062001\"},\"dependency_type\":\"-\",\"link_type\":\"-\",\"lag\":{\"value\":[4000000000485],\"type\":\"days\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/project/1752587000000097024/tasks/dependency")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"predecessor_task":{"id":"4000000062001"},"successor_task":{"id":"4000000062001"},"dependency_type":"-","link_type":"-","lag":{"value":[4000000000485],"type":"days"}}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "predecessor_task" : { "id" : "4000000062001" }, "successor_task" : { "id" : "4000000062001" }, "dependency_type" : "-", "link_type" : "-", "lag" : { "value" : [ 4000000000485 ], "type" : "days" } }

Sample Response

200
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 Status Timeline

Retrieve the status change timeline for a task. Use this API to track how a task has progressed through different statuses over time.

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

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

200[ { "updated_status" : { "color" : "#74cb80", "name" : "Open", "id" : "8000001289007", "type" : "open", "is_closed" : "false" }, "updated_on" : "2024-08-12T09:32:39.819Z", "updated_by" : { "zpuid" : "8000000002051", "last_name" : "Vincent", "id" : "16113268", "is_client_user" : "false", "display_name" : "Kyle", "first_name" : "Kyle", "email" : "kyle.vincent@zylker.com" }, "previous_status" : { "name" : "-", "type" : "open", "is_closed" : "false" } } ]
Get Status History (Project)

Retrieve the status history of all tasks in a project. Use this API to audit status transitions across tasks within a specific project.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

last_modified_time

long

Enter the last modification time

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("last_modified_time", "1631538698839");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('last_modified_time', '1631538698839');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory")
params = {
  "page" => "1",
  "per_page" => "10",
  "last_modified_time" => "1631538698839"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'last_modified_time' => '1631538698839',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory"

params = {
    "page": "1",
    "per_page": "10",
    "last_modified_time": "1631538698839"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_last_modified_time = curl_easy_escape(curl, "1631538698839", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory?page=%s&per_page=%s&last_modified_time=%s", enc_page, enc_per_page, enc_last_modified_time);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["last_modified_time"] = "1631538698839";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_last_modified_time = curl_easy_escape(curl, "1631538698839", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&last_modified_time=" + std::string(enc_last_modified_time);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-last_modified_time (java.net.URLEncoder/encode "1631538698839" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory" "?page=" enc-page "&per_page=" enc-per_page "&last_modified_time=" enc-last_modified_time)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("last_modified_time", "1631538698839")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory?page=1&per_page=10&last_modified_time=1631538698839 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("last_modified_time", "1631538698839");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'last_modified_time': '1631538698839'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
last_modified_time = "1631538698839"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("last_modified_time", "1631538698839")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedLast_modified_time = [@"1631538698839" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory?page=%@&per_page=%@&last_modified_time=%@", encodedPage, encodedPer_page, encodedLast_modified_time];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_last_modified_time = Uri.pct_encode "1631538698839" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&last_modified_time=" ^ enc_last_modified_time) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    last_modified_time = "1631538698839"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory"

params <- list(
  page = "1",
  per_page = "10",
  last_modified_time = "1631538698839"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/taskstatushistory")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "last_modified_time", value: "1631538698839")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" last_modified_time : "1631538698839"

Sample Response

200[ { "name" : "Conduct User Acceptance Testing", "status_history" : [ { "updated_on" : "2024-07-10T10:55:26.276Z", "updated_status" : { "name" : "In Progress", "id" : "8000000786005", "type" : "open" }, "updated_by" : { "name" : "Kyle", "id" : "16113268", "email" : "kyle.vincent@zylker.com", "zp_id" : "8000000002051" }, "transition_time" : { "duration" : "3 days 4 hrs 15 mins 22 secs", "duration_in_millis" : "274522000" }, "previous_status" : { "name" : "Open", "id" : "8000000000353", "type" : "open" } } ], "project" : { "id" : "8000000705005" }, "id" : "8000000717058", "status" : { "name" : "In Progress", "id" : "8000000786005", "type" : "open" } } ]
Get Status History (Portal)

Retrieve the status history of all tasks across a portal. Use this API to get a portal-wide view of task status transitions.

GET

/api/v3/portal/[PORTALID]/taskstatushistory

OAuth Scope:

ZohoProjects.tasks.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

last_modified_time

long

Enter the last modification time

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory?page=1&per_page=10&last_modified_time=1631538698839' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("last_modified_time", "1631538698839");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('last_modified_time', '1631538698839');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory")
params = {
  "page" => "1",
  "per_page" => "10",
  "last_modified_time" => "1631538698839"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'last_modified_time' => '1631538698839',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory"

params = {
    "page": "1",
    "per_page": "10",
    "last_modified_time": "1631538698839"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_last_modified_time = curl_easy_escape(curl, "1631538698839", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory?page=%s&per_page=%s&last_modified_time=%s", enc_page, enc_per_page, enc_last_modified_time);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["last_modified_time"] = "1631538698839";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_last_modified_time = curl_easy_escape(curl, "1631538698839", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&last_modified_time=" + std::string(enc_last_modified_time);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-last_modified_time (java.net.URLEncoder/encode "1631538698839" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory" "?page=" enc-page "&per_page=" enc-per_page "&last_modified_time=" enc-last_modified_time)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("last_modified_time", "1631538698839")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory?page=1&per_page=10&last_modified_time=1631538698839 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("last_modified_time", "1631538698839");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'last_modified_time': '1631538698839'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
last_modified_time = "1631538698839"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("last_modified_time", "1631538698839")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedLast_modified_time = [@"1631538698839" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory?page=%@&per_page=%@&last_modified_time=%@", encodedPage, encodedPer_page, encodedLast_modified_time];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_last_modified_time = Uri.pct_encode "1631538698839" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&last_modified_time=" ^ enc_last_modified_time) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    last_modified_time = "1631538698839"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory"

params <- list(
  page = "1",
  per_page = "10",
  last_modified_time = "1631538698839"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/taskstatushistory")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "last_modified_time", value: "1631538698839")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Status Timeline

Export the status timeline of tasks from a portal. Use this API to download a report of task status changes.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/status-timeline/export

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/export");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/status-timeline/export")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "download_url" : "https://projectsapi.zoho.com/portal/download/zylker/downloadaction.do?file=projects-ede888631dd552c0bd40fd6aa430bb143baf708eddb79873f75fd8575b2dd169f9d985d958d7d9e83a238f42bb6e4a3ab5b38e4a574337c259a0bb6edba41c53cfa823ce817373a45bb6a29e4e218e4939d74e556ef5680be0e6234cfbb6e5a6", "status" : "success" }
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 All Views

Retrieve both default and custom views from the Zoho Projects portal.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/mytasks/customviews");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/mytasks/customviews")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
Get Custom Views (Project)

Retrieve all task custom views available in a project. Use this API to list the custom views configured for 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

default : 1

Enter the page number to retrieve.

per_page

int

limit : 1-200
default : 100

Enter the number of custom views to retrieve per page.

sort_by

String

Specify the sort order for the results.
Accepted values: ASC(created_time), DESC(created_time), ASC(last_updated_time), DESC(last_updated_time)

view_type

String

Specify the type of custom views to retrieve.
Accepted values: predefined_views, my_views, custom_views, favourite_views, default_view, i_created, shared_with_me

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_type=date' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_type", "date");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_type', 'date');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)",
  "view_type" => "date"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
    'view_type' => 'date',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)",
    "view_type": "date"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_type = curl_easy_escape(curl, "date", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews?page=%s&per_page=%s&sort_by=%s&view_type=%s", enc_page, enc_per_page, enc_sort_by, enc_view_type);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_type);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
query["view_type"] = "date";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_type = curl_easy_escape(curl, "date", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_type=" + std::string(enc_view_type);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_view_type);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "date" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&view_type=" enc-view_type)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_type", "date")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews?page=1&per_page=10&sort_by=ASC%28last_modified_time%29&view_type=date HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_type", "date");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)',
  'view_type': 'date'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
view_type = "date"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_type", "date")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"date" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews?page=%@&per_page=%@&sort_by=%@&view_type=%@", encodedPage, encodedPer_page, encodedSort_by, encodedView_type];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_type = Uri.pct_encode "date" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&view_type=" ^ enc_view_type) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
    view_type = "date"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)",
  view_type = "date"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_type", value: "date")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "ASC(last_modified_time)" view_type : "date"

Sample Response

200{ "page_info" : { "page" : 1, "per_page" : 100, "page_count" : 1, "has_next_page" : false }, "views" : [ { "id" : "5000000009005", "name" : "Custom View 1", "view_type" : "custom_views", "is_mytasks_view_enabled" : true, "created_time" : "2025-11-03T01:25:48.279Z", "last_modified_time" : "2025-11-03T01:25:48.282Z", "is_default_view" : false, "is_default_view_for_all_users" : false, "is_favourite" : false, "last_modified_by" : { "zpuid" : "5000000002945", "displayname" : "Alexander", "email" : "alexander@zylker.com", "zuid" : "43593400" }, "has_edit_permission" : true, "created_by_user" : { "zpuid" : "5000000002945", "displayname" : "Alexander", "email" : "alexander@zylker.com", "zuid" : "43593400" } } ] }
Get Custom View Details

Retrieve the details of a custom task view. Use this API to fetch the filters, grouping, and display settings configured for a specific custom view.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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 HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "taskcustomviews" : [ { "id" : "4000000042013", "name" : "My Pending Work Items", "description" : "Pending work items are listed in this view.", "view_type" : "custom_views", "access_type" : "me", "criteria" : "[{\"cfid\":\"4000000000173\",\"module_type\":\"task\",\"column_name\":\"CUSTOM_STATUSID\",\"criteria_condition\":\"is\",\"value\":[\"4000000000476\"],\"table_name\":\"TodoListItem\",\"field_type\":\"picklist\"}]", "criteria_pattern" : "1", "project_accessibility_type" : "none", "is_mytasks_view_enabled" : false, "is_customised_column_view_enabled" : false, "is_favourite" : false, "has_edit_permission" : true, "created_time" : "2024-08-08T06:56:52.129Z", "last_modified_time" : "2024-08-12T06:42:16.461Z", "created_by" : { "zpuid" : "4000000006061", "displayname" : "Adam Solen", "email" : "adam.solen@zylker.com", "zuid" : "15067667" }, "last_modified_by" : { "zpuid" : "4000000006061", "displayname" : "Adam Solen", "email" : "adam.solen@zylker.com", "zuid" : "15067667" }, "shared_users" : [ { "zpuid" : "4000000006075", "displayname" : "Alex Johnson", "email" : "alex.johnson@zylker.com", "zuid" : "15067680" } ], "associated_projects" : [ { "id" : "4000000009003", "name" : "Zylker Web Redesign" } ] } ] }
Set Default View (Portal)

Set a custom view as the default view at the portal level. Use this API to define which view is displayed by default when users access tasks across the portal.

POST

/api/v3/portal/[PORTALID]/tasks/customviews/[CUSTOMVIEWID]/setdefaultview

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
for_all_users

String

Set or remove this view as default for all users in the portal. Accepted values: true, false.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"for_all_users":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview";
params = Map();
params.put("for_all_users", "-");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview');

const payload = JSON.stringify({"for_all_users":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"for_all_users":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"for_all_users":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"for_all_users":"-"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"for_all_users\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview");
request.Content = new StringContent(
    @"{""for_all_users"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"for_all_users\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"for_all_users\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"for_all_users\":\"-\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"for_all_users":"-"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"for_all_users\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"for_all_users":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"for_all_users":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"for_all_users":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"for_all_users\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"for_all_users":"-"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"for_all_users":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"for_all_users\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/setdefaultview")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"for_all_users":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "for_all_users" : "-" }

Sample Response

204 No Content
Set Favourite View (Portal)

Set a custom view as a favourite at the portal level. Use this API to pin frequently used views for quicker access across the portal.

POST

/api/v3/portal/[PORTALID]/tasks/customviews/[CUSTOMVIEWID]/markfavourite

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/markfavourite")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Remove View from Favorites (Portal)

Remove a custom view from favorites at the portal level. Use this API to unpin a view that no longer needs to be featured as a favourite across the portal.

POST

/api/v3/portal/[PORTALID]/tasks/customviews/[CUSTOMVIEWID]/unmarkfavourite

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269/unmarkfavourite")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Set Default View (Project)

Set a custom task view as the default view for a project. Use this API to define which view is displayed by default when users access tasks within a specific project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/customviews/[CUSTOMVIEWID]/setdefaultview

OAuth Scope:

ZohoProjects.tasks.UPDATE

Parameter

Param Name
Data Type
Description
for_all_users

String

Set or remove this view as default for all users in the project. Accepted values: true, false.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"for_all_users":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview";
params = Map();
params.put("for_all_users", "-");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview');

const payload = JSON.stringify({"for_all_users":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"for_all_users":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"for_all_users":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"for_all_users":"-"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"for_all_users\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview");
request.Content = new StringContent(
    @"{""for_all_users"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"for_all_users\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"for_all_users\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"for_all_users\":\"-\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"for_all_users":"-"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"for_all_users\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"for_all_users":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"for_all_users":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"for_all_users":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"for_all_users\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"for_all_users":"-"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"for_all_users":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"for_all_users\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/setdefaultview")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"for_all_users":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "for_all_users" : "-" }

Sample Response

204 No Content
Set Favorite View (Project)

Set a custom view as a favourite for a project. Use this API to pin frequently used views for quicker access within a specific project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/customviews/[CUSTOMVIEWID]/markfavourite

OAuth Scope:

ZohoProjects.tasks.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/markfavourite")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Remove View From Favorites (Project)

Remove a task 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/customviews/1752587000000097269/unmarkfavourite")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Delete Custom View

Remove a task custom view from the Zoho Projects portal permanently.

DELETE

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

OAuth Scope:

ZohoProjects.tasks.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tasks/customviews/1752587000000097269")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()
Meta

This module covers operations related to the meta data within Zoho Projects. Use this API to modify the meta data of tasks at the project or portal level.

Get Blocking/Waiting Tasks

Retrieve the tasks that are blocking or waiting on a given task.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/tasks/[TASKID]/blocking-waiting-tasks

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/blocking-waiting-tasks");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tasks/1752587000000097101/blocking-waiting-tasks")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "dependency_status" : "blocking", "tasks" : [ { "prefix" : "TH1-T2", "name" : "Feature list sign-off", "id" : "4000000144244", "tasklist" : { "id" : "4000000144239" } } ] }
Baseline

This module covers operations related to task baselines within Zoho Projects.

Get Baselines

Retrieve all baselines from a project. Use this API to view saved project snapshots for comparing planned versus actual progress.

GET

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

OAuth Scope:

ZohoProjects.tasks.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselines")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 task details captured under a specific baseline. Use this API to compare current task data against a baseline to identify deviations.

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. Should be greater than or equal to 0.

range

int

Enter the range to retrieve. Should be less than or equal to 200.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails?baselineId=4000000097557084&index=1&range=100' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails";
params = Map();
params.put("baselineId", "4000000097557084");
params.put("index", "1");
params.put("range", "100");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails');
url.searchParams.append('baselineId', '4000000097557084');
url.searchParams.append('index', '1');
url.searchParams.append('range', '100');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails")
params = {
  "baselineId" => "4000000097557084",
  "index" => "1",
  "range" => "100"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'baselineId' => '4000000097557084',
    'index' => '1',
    'range' => '100',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails"

params = {
    "baselineId": "4000000097557084",
    "index": "1",
    "range": "100"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_baselineId = curl_easy_escape(curl, "4000000097557084", 0);
        char *enc_index = curl_easy_escape(curl, "1", 0);
        char *enc_range = curl_easy_escape(curl, "100", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails?baselineId=%s&index=%s&range=%s", enc_baselineId, enc_index, enc_range);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_baselineId);
        curl_free(enc_index);
        curl_free(enc_range);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["baselineId"] = "4000000097557084";
query["index"] = "1";
query["range"] = "100";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_baselineId = curl_easy_escape(curl, "4000000097557084", 0);
        char* enc_index = curl_easy_escape(curl, "1", 0);
        char* enc_range = curl_easy_escape(curl, "100", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails";
        url += "?baselineId=" + std::string(enc_baselineId);
        url += "&index=" + std::string(enc_index);
        url += "&range=" + std::string(enc_range);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_baselineId);
        curl_free(enc_index);
        curl_free(enc_range);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-baselineId (java.net.URLEncoder/encode "4000000097557084" "UTF-8")
      enc-index (java.net.URLEncoder/encode "1" "UTF-8")
      enc-range (java.net.URLEncoder/encode "100" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails" "?baselineId=" enc-baselineId "&index=" enc-index "&range=" enc-range)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails", nil)
    q := req.URL.Query()
    q.Add("baselineId", "4000000097557084")
    q.Add("index", "1")
    q.Add("range", "100")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails?baselineId=4000000097557084&index=1&range=100 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("baselineId", "4000000097557084");
uriBuilder.addParameter("index", "1");
uriBuilder.addParameter("range", "100");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails';

const params = new URLSearchParams({
  'baselineId': '4000000097557084',
  'index': '1',
  'range': '100'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
baselineId = "4000000097557084"
index = "1"
range = "100"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("baselineId", "4000000097557084")
    urlBuilder.addQueryParameter("index", "1")
    urlBuilder.addQueryParameter("range", "100")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedBaselineId = [@"4000000097557084" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIndex = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedRange = [@"100" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails?baselineId=%@&index=%@&range=%@", encodedBaselineId, encodedIndex, encodedRange];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_baselineId = Uri.pct_encode "4000000097557084" in
  let enc_index = Uri.pct_encode "1" in
  let enc_range = Uri.pct_encode "100" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails" ^ "?baselineId=" ^ enc_baselineId ^ "&index=" ^ enc_index ^ "&range=" ^ enc_range) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    baselineId = "4000000097557084"
    index = "1"
    range = "100"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails"

params <- list(
  baselineId = "4000000097557084",
  index = "1",
  range = "100"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/baselinedetails")!
components.queryItems = [
    URLQueryItem(name: "baselineId", value: "4000000097557084"),
    URLQueryItem(name: "index", value: "1"),
    URLQueryItem(name: "range", value: "100")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

baselineId : "4000000097557084" 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" } ] }
Time Logs

This module covers time log related operations within Zoho Projects. Use this API to manage time logs, generate time log reports, and configure time log-related settings.

Time Log Operations

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 Time Log Details

Retrieve the details of a specific time log entry in 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]?type=task' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]";
params = Map();
params.put("type", "task");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]');
url.searchParams.append('type', 'task');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")
params = {
  "type" => "task"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'type' => 'task',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"

params = {
    "type": "task"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_type = curl_easy_escape(curl, "task", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]?type=%s", enc_type);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_type);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["type"] = "task";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_type = curl_easy_escape(curl, "task", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]";
        url += "?type=" + std::string(enc_type);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_type);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "task" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" "?type=" enc-type)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]", nil)
    q := req.URL.Query()
    q.Add("type", "task")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]?type=task HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]");
uriBuilder.addParameter("type", "task");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]';

const params = new URLSearchParams({
  'type': 'task'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
type = "task"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "task")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedType = [@"task" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]?type=%@", encodedType];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_type = Uri.pct_encode "task" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" ^ "?type=" ^ enc_type) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    type = "task"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"

params <- list(
  type = "task"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")!
components.queryItems = [
    URLQueryItem(name: "type", value: "task")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Time 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" : "Time 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" : "8000000001234", "currency_code" : "USD" }, "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.taylor@zylker.com", "zuid" : "24925026" }, "cf_phone" : "1234567890", "cf_user_pick_list" : { "zpuid" : "8000000002411", "name" : "Mark", "email" : "mark.taylor@zylker.com", "zuid" : "24925026" }, "billing_status" : "Billable", "id" : "8000000011005", "cf_multi_line" : "Multi Line Custom Field Value", "owner" : { "zpuid" : "8000000002411", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=24925026", "name" : "Mark", "email" : "mark.taylor@zylker.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.taylor@zylker.com", "start_time" : "04:15 PM", "log_hour" : "00:04" }
Add Time Log

Add a time log to a project. Use this API to record time spent on tasks or issues within 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 name of the time log.

date

String

required

Enter the date of the time log. Format: YYYY-MM-DD

bill_status

String

required

Enter the billing status of the time log. Accepted values: Billable, Non Billable

hours

String

Enter the number of hours to log.

notes

String

max length : 10000

Enter any additional notes for the time log.

owner_zpuid

long

Enter the ZPUID of the time log owner.

approver

long

Enter the ZPUID of the approver for the time log.

start_time

String

Enter the start time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

end_time

String

Enter the end time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

JSONObject

required
max length : 1000

Enter the details of the module associated with the time log.

cf_user_picklist

long

Enter the name of the user picklist custom field used during creation.

cf_single_line

String

max length : 255

Enter the name of the single-line custom field used during creation.

cf_multi_line

String

max length : 2000

Enter the name of the multi-line text custom field used during creation.

cf_email

String

max length : 255

Enter the name of the email custom field used during creation.

cf_date

String

Enter the name of the date custom field used during creation.

cf_decimal

String

Enter the name of the decimal custom field used during creation.

cf_check_box

String

Enter the name of the checkbox custom field used during creation.

sprints_logid

String

Enter the Zoho Sprints log ID to link the time log to a sprint.

status

String

Enter the approval status of the time log. Accepted values: Approved, Unapproved, Rejected

cost_rate_per_hour

double

Enter the cost rate per hour for the time log.

for_timer

boolean

Specify whether the time log is added from a timer. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log' \
-H 'Authorization: Bearer 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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log";
params = Map();
params.put("log_name", "Enter a name for the general time log");
params.put("date", "2024-12-11");
params.put("bill_status", "Billable");
params.put("hours", "01.00");
params.put("notes", "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.");
params.put("owner_zpuid", "8000000008075");
params.put("approver", "22822935");
params.put("start_time", "01:00 AM");
params.put("end_time", "02:00 AM");
params.put("module", {"id":"4000000004947","type":"task"});
params.put("cf_user_picklist", "-");
params.put("cf_single_line", "-");
params.put("cf_multi_line", "-");
params.put("cf_email", "-");
params.put("cf_date", "-");
params.put("cf_decimal", "-");
params.put("cf_check_box", "-");
params.put("sprints_logid", "-");
params.put("status", "on");
params.put("cost_rate_per_hour", "1");
params.put("for_timer", "false");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log');

const payload = JSON.stringify({"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log");
request.Content = new StringContent(
    @"{""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 time_logs."",""owner_zpuid"":""8000000008075"",""approver"":""22822935"",""start_time"":""01:00 AM"",""end_time"":""02:00 AM"",""module"":{""id"":""4000000004947"",""type"":""task""},""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""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/log")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 time_logs.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : { "id" : "4000000004947", "type" : "task" }, "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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "zuid" : "22822935" }, "date" : "2024-08-21", "created_time" : "2024-08-21T09:56:48.810Z", "notes" : "Time log details:\nStart Time - 08-21-2024 09:56 AM End Time - 08-21-2024 10:56 AM\nTime spent - 01:00", "last_modified_time" : "2024-08-21T09:56:48.810Z", "cf_single_line" : "Single Line Custom Field Value", "approval" : { "status" : "Pending" }, "log_notes" : "Time log details:\nStart Time - 08-21-2024 09:56 AM End Time - 08-21-2024 10:56 AM\nTime spent - 01:00", "cf_currency" : { "amount" : "10.0", "formatted_amount" : "$10.00", "currency_id" : "8000000001234", "currency_code" : "USD" }, "project" : { "name" : "Software Development", "id" : "8000000005863" }, "cf_url" : "https://projects.zoho.com", "cf_date" : "2024-08-21", "cf_pick_list" : "Picklist 1", "type" : "general", "cf_email" : "mark.taylor@zylker.com", "added_by" : { "zpuid" : "8000000008075", "name" : "Mark", "email" : "mark.taylor@zylker.com", "zuid" : "22822935" }, "cf_phone" : "1234567890", "name" : "Feature Testing", "cf_user_pick_list" : { "zpuid" : "8000000008075", "name" : "Mark", "email" : "mark.taylor@zylker.com", "zuid" : "22822935" }, "billing_status" : "Billable", "id" : "8000000008094", "log_hour" : "01:00", "cf_multi_line" : "Multi Line Custom Field Value" }
Update Time Log

Modify a 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 name of the time log.

date

String

Enter the date of the time log. Format: YYYY-MM-DD

bill_status

String

Enter the billing status of the time log. Accepted values: Billable, Non Billable

approval_status

String

Enter the approval status of the time log. Accepted values: Approved, Unapproved, Rejected

hours

String

Enter the number of hours to log.

notes

String

max length : 10000

Enter any additional notes for the time log.

owner_zpuid

long

Enter the ZPUID of the time log owner.

approver

long

Enter the ZPUID of the approver for the time log.

start_time

String

Enter the start time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

end_time

String

Enter the end time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

JSONObject

required
max length : 1000

Enter the details of the module associated with the time log.

cf_number

long

Enter the name of the numeric custom field used during creation.

cf_user_picklist

long

Enter the name of the user picklist custom field used during creation.

cf_single_line

String

max length : 255

Enter the name of the single-line custom field used during creation.

cf_multi_line

String

max length : 2000

Enter the name of the multi-line text custom field used during creation.

cf_email

String

max length : 255

Enter the name of the email custom field used during creation.

cf_date

String

Enter the name of the date custom field used during creation.

cf_decimal

String

Enter the name of the decimal custom field used during creation.

cf_check_box

String

Enter the name of the checkbox custom field used during creation.

extra_data

JSONObject

Enter additional time entry details to log alongside the main entry.

cost_rate_per_hour

double

Enter the cost per hour for the time log.

is_draft

String

Specify whether the time log is saved as a draft. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]' \
-H 'Authorization: Bearer 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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]";
params = Map();
params.put("log_name", "Enter a name for the general time log");
params.put("date", "2024-12-11");
params.put("bill_status", "Billable");
params.put("approval_status", "Approved");
params.put("hours", "01.00");
params.put("notes", "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.");
params.put("owner_zpuid", "8000000008075");
params.put("approver", "22822935");
params.put("start_time", "01:00 AM");
params.put("end_time", "02:00 AM");
params.put("module", "{"type":"issue","id":"8000000008112"}");
params.put("cf_number", "-");
params.put("cf_user_picklist", "-");
params.put("cf_single_line", "-");
params.put("cf_multi_line", "-");
params.put("cf_email", "-");
params.put("cf_date", "-");
params.put("cf_decimal", "-");
params.put("cf_check_box", "-");
params.put("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 time_logs."});
params.put("cost_rate_per_hour", "1");
params.put("is_draft", "false");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]');

const payload = JSON.stringify({"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"8000000008112\\\"}\",\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]");
request.Content = new StringContent(
    @"{""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 time_logs."",""owner_zpuid"":""8000000008075"",""approver"":""22822935"",""start_time"":""01:00 AM"",""end_time"":""02:00 AM"",""module"":""{\""type\"":\""issue\"",\""id\"":\""8000000008112\""}"",""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 time_logs.""},""cost_rate_per_hour"":""1"",""is_draft"":""false""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"8000000008112\\\"}\",\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"8000000008112\\\"}\",\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"8000000008112\\\"}\",\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"8000000008112\\\"}\",\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"8000000008112\\\"}\",\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\"type\":\"issue\",\"id\":\"8000000008112\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":\"{\\\"type\\\":\\\"issue\\\",\\\"id\\\":\\\"8000000008112\\\"}\",\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\",\"is_draft\":\"false\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":"{\\"type\\":\\"issue\\",\\"id\\":\\"8000000008112\\"}","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 time_logs."},"cost_rate_per_hour":"1","is_draft":"false"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 time_logs.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : "{\"type\":\"issue\",\"id\":\"8000000008112\"}", "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 time_logs." }, "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" : "Time 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" : "8000000001234", "currency_code" : "USD" }, "project" : { "name" : "Software Development", "id" : "8000000005863" }, "cf_date" : "2024-08-22", "cf_pick_list" : "Picklist 1", "type" : "issue", "added_by" : { "zpuid" : "8000000002411", "name" : "Mark Taylor", "email" : "mark.taylor@zylker.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.taylor@zylker.com", "zuid" : "24925026" }, "billing_status" : "Billable", "id" : "8000000011005", "cf_multi_line" : "Multi Line Custom Field Value", "owner" : { "zpuid" : "8000000002411", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=24925026", "name" : "Mark", "email" : "mark.taylor@zylker.com", "zuid" : "24925026" }, "approver" : { "zpuid" : "8000000002411", "name" : "Mark", "email" : "mark.taylor@zylker.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.taylor@zylker.com", "status" : "Approved" }, "end_time" : "09:59 AM", "cf_url" : "projects.zoho.com", "cf_email" : "mark.taylor@zylker.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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"module":"task"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]";
params = Map();
params.put("module", "task");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]');

const payload = JSON.stringify({"module":"task"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"module":"task"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => '{"module":"task"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"module":"task"}'

response = requests.delete(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]");
request.Content = new StringContent(
    @"{""module"":""task""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"module\":\"task\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"module\":\"task\"}")
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"module":"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"module":"task"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"module":"task"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"module":"task"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"module\":\"task\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"module":"task"}|json} in
  Lwt_main.run (
    Client.delete ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"module":"task"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]" -Method DELETE -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"module\":\"task\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/logs/[LOGID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"module":"task"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "module" : "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 Time Logs

Retrieve all time logs from the Zoho Projects portal

GET

/api/v3/portal/[PORTALID]/(timesheet|timelogs)

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

required

Enter the view type. Accepted values: day, week, month, customdate. Use customdate for a custom date range ? the difference between start_date and end_date must not exceed 6 months.

start_date

String

Enter the start date of the time log range. Format: YYYY-MM-DD

end_date

String

Enter the end date of the time log range. Format: YYYY-MM-DD

JSONObject

Enter the filter criteria to narrow down the time log results.

JSONObject

required

Enter the details of the module associated with the time log.

fetch_by_modified_time

boolean

Specify whether to filter time logs by modified date instead of start date. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)?page=1&per_page=10&view_type=week&start_date=2024-08-21&end_date=2024-08-22&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&module=%7B%22id%22%3A%224000000004947%22%2C%22type%22%3A%22task%22%7D&fetch_by_modified_time=false' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("view_type", "week");
params.put("start_date", "2024-08-21");
params.put("end_date", "2024-08-22");
params.put("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"});
params.put("module", {"id":"4000000004947","type":"task"});
params.put("fetch_by_modified_time", "false");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('view_type', 'week');
url.searchParams.append('start_date', '2024-08-21');
url.searchParams.append('end_date', '2024-08-22');
url.searchParams.append('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"}');
url.searchParams.append('module', '{"id":"4000000004947","type":"task"}');
url.searchParams.append('fetch_by_modified_time', 'false');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)")
params = {
  "page" => "1",
  "per_page" => "10",
  "view_type" => "week",
  "start_date" => "2024-08-21",
  "end_date" => "2024-08-22",
  "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\"}",
  "fetch_by_modified_time" => "false"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'view_type' => 'week',
    'start_date' => '2024-08-21',
    'end_date' => '2024-08-22',
    '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"}',
    'fetch_by_modified_time' => 'false',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)"

params = {
    "page": "1",
    "per_page": "10",
    "view_type": "week",
    "start_date": "2024-08-21",
    "end_date": "2024-08-22",
    "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\"}",
    "fetch_by_modified_time": "false"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_view_type = curl_easy_escape(curl, "week", 0);
        char *enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char *enc_end_date = curl_easy_escape(curl, "2024-08-22", 0);
        char *enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char *enc_module = curl_easy_escape(curl, "{\"id\":\"4000000004947\",\"type\":\"task\"}", 0);
        char *enc_fetch_by_modified_time = curl_easy_escape(curl, "false", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)?page=%s&per_page=%s&view_type=%s&start_date=%s&end_date=%s&filter=%s&module=%s&fetch_by_modified_time=%s", enc_page, enc_per_page, enc_view_type, enc_start_date, enc_end_date, enc_filter, enc_module, enc_fetch_by_modified_time);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_end_date);
        curl_free(enc_filter);
        curl_free(enc_module);
        curl_free(enc_fetch_by_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["view_type"] = "week";
query["start_date"] = "2024-08-21";
query["end_date"] = "2024-08-22";
query["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\"}";
query["module"] = "{\"id\":\"4000000004947\",\"type\":\"task\"}";
query["fetch_by_modified_time"] = "false";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_view_type = curl_easy_escape(curl, "week", 0);
        char* enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char* enc_end_date = curl_easy_escape(curl, "2024-08-22", 0);
        char* enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char* enc_module = curl_easy_escape(curl, "{\"id\":\"4000000004947\",\"type\":\"task\"}", 0);
        char* enc_fetch_by_modified_time = curl_easy_escape(curl, "false", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&view_type=" + std::string(enc_view_type);
        url += "&start_date=" + std::string(enc_start_date);
        url += "&end_date=" + std::string(enc_end_date);
        url += "&filter=" + std::string(enc_filter);
        url += "&module=" + std::string(enc_module);
        url += "&fetch_by_modified_time=" + std::string(enc_fetch_by_modified_time);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_end_date);
        curl_free(enc_filter);
        curl_free(enc_module);
        curl_free(enc_fetch_by_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "week" "UTF-8")
      enc-start_date (java.net.URLEncoder/encode "2024-08-21" "UTF-8")
      enc-end_date (java.net.URLEncoder/encode "2024-08-22" "UTF-8")
      enc-filter (java.net.URLEncoder/encode "{\"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\"}" "UTF-8")
      enc-module (java.net.URLEncoder/encode "{\"id\":\"4000000004947\",\"type\":\"task\"}" "UTF-8")
      enc-fetch_by_modified_time (java.net.URLEncoder/encode "false" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)" "?page=" enc-page "&per_page=" enc-per_page "&view_type=" enc-view_type "&start_date=" enc-start_date "&end_date=" enc-end_date "&filter=" enc-filter "&module=" enc-module "&fetch_by_modified_time=" enc-fetch_by_modified_time)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("view_type", "week")
    q.Add("start_date", "2024-08-21")
    q.Add("end_date", "2024-08-22")
    q.Add("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\"}")
    q.Add("module", "{\"id\":\"4000000004947\",\"type\":\"task\"}")
    q.Add("fetch_by_modified_time", "false")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)?page=1&per_page=10&view_type=week&start_date=2024-08-21&end_date=2024-08-22&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&module=%7B%22id%22%3A%224000000004947%22%2C%22type%22%3A%22task%22%7D&fetch_by_modified_time=false HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("view_type", "week");
uriBuilder.addParameter("start_date", "2024-08-21");
uriBuilder.addParameter("end_date", "2024-08-22");
uriBuilder.addParameter("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\"}");
uriBuilder.addParameter("module", "{\"id\":\"4000000004947\",\"type\":\"task\"}");
uriBuilder.addParameter("fetch_by_modified_time", "false");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'view_type': 'week',
  'start_date': '2024-08-21',
  'end_date': '2024-08-22',
  '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"}',
  'fetch_by_modified_time': 'false'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
view_type = "week"
start_date = "2024-08-21"
end_date = "2024-08-22"
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"}
fetch_by_modified_time = "false"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("view_type", "week")
    urlBuilder.addQueryParameter("start_date", "2024-08-21")
    urlBuilder.addQueryParameter("end_date", "2024-08-22")
    urlBuilder.addQueryParameter("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\"}")
    urlBuilder.addQueryParameter("module", "{\"id\":\"4000000004947\",\"type\":\"task\"}")
    urlBuilder.addQueryParameter("fetch_by_modified_time", "false")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"week" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedStart_date = [@"2024-08-21" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedEnd_date = [@"2024-08-22" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFilter = [@"{\"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\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedModule = [@"{\"id\":\"4000000004947\",\"type\":\"task\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFetch_by_modified_time = [@"false" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)?page=%@&per_page=%@&view_type=%@&start_date=%@&end_date=%@&filter=%@&module=%@&fetch_by_modified_time=%@", encodedPage, encodedPer_page, encodedView_type, encodedStart_date, encodedEnd_date, encodedFilter, encodedModule, encodedFetch_by_modified_time];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_view_type = Uri.pct_encode "week" in
  let enc_start_date = Uri.pct_encode "2024-08-21" in
  let enc_end_date = Uri.pct_encode "2024-08-22" in
  let enc_filter = Uri.pct_encode "{\"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\"}" in
  let enc_module = Uri.pct_encode "{\"id\":\"4000000004947\",\"type\":\"task\"}" in
  let enc_fetch_by_modified_time = Uri.pct_encode "false" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&view_type=" ^ enc_view_type ^ "&start_date=" ^ enc_start_date ^ "&end_date=" ^ enc_end_date ^ "&filter=" ^ enc_filter ^ "&module=" ^ enc_module ^ "&fetch_by_modified_time=" ^ enc_fetch_by_modified_time) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    view_type = "week"
    start_date = "2024-08-21"
    end_date = "2024-08-22"
    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`"}"
    fetch_by_modified_time = "false"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)"

params <- list(
  page = "1",
  per_page = "10",
  view_type = "week",
  start_date = "2024-08-21",
  end_date = "2024-08-22",
  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\"}",
  fetch_by_modified_time = "false"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "view_type", value: "week"),
    URLQueryItem(name: "start_date", value: "2024-08-21"),
    URLQueryItem(name: "end_date", value: "2024-08-22"),
    URLQueryItem(name: "filter", value: "{\"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\"}"),
    URLQueryItem(name: "module", value: "{\"id\":\"4000000004947\",\"type\":\"task\"}"),
    URLQueryItem(name: "fetch_by_modified_time", value: "false")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" view_type : "week" start_date : "2024-08-21" end_date : "2024-08-22" 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"} fetch_by_modified_time : "false"

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 Taylor", "email" : "mark.taylor@zylker.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.\nTime 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 Taylor", "email" : "mark.taylor@zylker.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 Taylor", "email" : "mark.taylor@zylker.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 Taylor", "email" : "mark.taylor@zylker.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.\nTime 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 Taylor", "time" : "2024-12-19T19:25:19.705Z", "zuid" : 27812151, "email" : "mark.taylor@zylker.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 Taylor", "email" : "mark.taylor@zylker.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 Project Time Logs

Retrieve all time logs from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/(timesheet|timelogs)

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. Use customdate for a custom date range ? the difference between start_date and end_date must not exceed 6 months. When using projectspan, start_date and end_date are ignored.

start_date

String

Enter the start date of the time log range. Format: YYYY-MM-DD

end_date

String

Enter the end date of the time log range. Format: YYYY-MM-DD

JSONObject

Enter the filter criteria to narrow down the time log results.

JSONObject

required

Enter the details of the module associated with the time log.

view_id

long

Enter the ID of the custom view to apply.

timelog_group_id

long

Enter the ID of the timesheet group to retrieve its time logs.

frompage

String

Enter the source page from which the API is called. Accepted values: timeloggroup_draft, timeloggroup_update, timeloggroup_regenerate

fetch_by_modified_time

boolean

Specify whether to filter time logs by modified date instead of start date. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)?page=1&per_page=10&view_type=week&start_date=2024-08-21&end_date=2024-08-22&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&module=%7B%22id%22%3A%224000000004947%22%2C%22type%22%3A%22task%22%7D&view_id=23806000074760021&timelog_group_id=-&frompage=mytimesheet&fetch_by_modified_time=false' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("view_type", "week");
params.put("start_date", "2024-08-21");
params.put("end_date", "2024-08-22");
params.put("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"});
params.put("module", {"id":"4000000004947","type":"task"});
params.put("view_id", "23806000074760021");
params.put("timelog_group_id", "-");
params.put("frompage", "mytimesheet");
params.put("fetch_by_modified_time", "false");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('view_type', 'week');
url.searchParams.append('start_date', '2024-08-21');
url.searchParams.append('end_date', '2024-08-22');
url.searchParams.append('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"}');
url.searchParams.append('module', '{"id":"4000000004947","type":"task"}');
url.searchParams.append('view_id', '23806000074760021');
url.searchParams.append('timelog_group_id', '-');
url.searchParams.append('frompage', 'mytimesheet');
url.searchParams.append('fetch_by_modified_time', 'false');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)")
params = {
  "page" => "1",
  "per_page" => "10",
  "view_type" => "week",
  "start_date" => "2024-08-21",
  "end_date" => "2024-08-22",
  "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",
  "timelog_group_id" => "-",
  "frompage" => "mytimesheet",
  "fetch_by_modified_time" => "false"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'view_type' => 'week',
    'start_date' => '2024-08-21',
    'end_date' => '2024-08-22',
    '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',
    'timelog_group_id' => '-',
    'frompage' => 'mytimesheet',
    'fetch_by_modified_time' => 'false',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)"

params = {
    "page": "1",
    "per_page": "10",
    "view_type": "week",
    "start_date": "2024-08-21",
    "end_date": "2024-08-22",
    "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",
    "timelog_group_id": "-",
    "frompage": "mytimesheet",
    "fetch_by_modified_time": "false"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_view_type = curl_easy_escape(curl, "week", 0);
        char *enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char *enc_end_date = curl_easy_escape(curl, "2024-08-22", 0);
        char *enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char *enc_module = curl_easy_escape(curl, "{\"id\":\"4000000004947\",\"type\":\"task\"}", 0);
        char *enc_view_id = curl_easy_escape(curl, "23806000074760021", 0);
        char *enc_timelog_group_id = curl_easy_escape(curl, "-", 0);
        char *enc_frompage = curl_easy_escape(curl, "mytimesheet", 0);
        char *enc_fetch_by_modified_time = curl_easy_escape(curl, "false", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)?page=%s&per_page=%s&view_type=%s&start_date=%s&end_date=%s&filter=%s&module=%s&view_id=%s&timelog_group_id=%s&frompage=%s&fetch_by_modified_time=%s", enc_page, enc_per_page, enc_view_type, enc_start_date, enc_end_date, enc_filter, enc_module, enc_view_id, enc_timelog_group_id, enc_frompage, enc_fetch_by_modified_time);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_end_date);
        curl_free(enc_filter);
        curl_free(enc_module);
        curl_free(enc_view_id);
        curl_free(enc_timelog_group_id);
        curl_free(enc_frompage);
        curl_free(enc_fetch_by_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["view_type"] = "week";
query["start_date"] = "2024-08-21";
query["end_date"] = "2024-08-22";
query["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\"}";
query["module"] = "{\"id\":\"4000000004947\",\"type\":\"task\"}";
query["view_id"] = "23806000074760021";
query["timelog_group_id"] = "-";
query["frompage"] = "mytimesheet";
query["fetch_by_modified_time"] = "false";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_view_type = curl_easy_escape(curl, "week", 0);
        char* enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char* enc_end_date = curl_easy_escape(curl, "2024-08-22", 0);
        char* enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char* enc_module = curl_easy_escape(curl, "{\"id\":\"4000000004947\",\"type\":\"task\"}", 0);
        char* enc_view_id = curl_easy_escape(curl, "23806000074760021", 0);
        char* enc_timelog_group_id = curl_easy_escape(curl, "-", 0);
        char* enc_frompage = curl_easy_escape(curl, "mytimesheet", 0);
        char* enc_fetch_by_modified_time = curl_easy_escape(curl, "false", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&view_type=" + std::string(enc_view_type);
        url += "&start_date=" + std::string(enc_start_date);
        url += "&end_date=" + std::string(enc_end_date);
        url += "&filter=" + std::string(enc_filter);
        url += "&module=" + std::string(enc_module);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&timelog_group_id=" + std::string(enc_timelog_group_id);
        url += "&frompage=" + std::string(enc_frompage);
        url += "&fetch_by_modified_time=" + std::string(enc_fetch_by_modified_time);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_end_date);
        curl_free(enc_filter);
        curl_free(enc_module);
        curl_free(enc_view_id);
        curl_free(enc_timelog_group_id);
        curl_free(enc_frompage);
        curl_free(enc_fetch_by_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "week" "UTF-8")
      enc-start_date (java.net.URLEncoder/encode "2024-08-21" "UTF-8")
      enc-end_date (java.net.URLEncoder/encode "2024-08-22" "UTF-8")
      enc-filter (java.net.URLEncoder/encode "{\"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\"}" "UTF-8")
      enc-module (java.net.URLEncoder/encode "{\"id\":\"4000000004947\",\"type\":\"task\"}" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "23806000074760021" "UTF-8")
      enc-timelog_group_id (java.net.URLEncoder/encode "-" "UTF-8")
      enc-frompage (java.net.URLEncoder/encode "mytimesheet" "UTF-8")
      enc-fetch_by_modified_time (java.net.URLEncoder/encode "false" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)" "?page=" enc-page "&per_page=" enc-per_page "&view_type=" enc-view_type "&start_date=" enc-start_date "&end_date=" enc-end_date "&filter=" enc-filter "&module=" enc-module "&view_id=" enc-view_id "&timelog_group_id=" enc-timelog_group_id "&frompage=" enc-frompage "&fetch_by_modified_time=" enc-fetch_by_modified_time)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("view_type", "week")
    q.Add("start_date", "2024-08-21")
    q.Add("end_date", "2024-08-22")
    q.Add("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\"}")
    q.Add("module", "{\"id\":\"4000000004947\",\"type\":\"task\"}")
    q.Add("view_id", "23806000074760021")
    q.Add("timelog_group_id", "-")
    q.Add("frompage", "mytimesheet")
    q.Add("fetch_by_modified_time", "false")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)?page=1&per_page=10&view_type=week&start_date=2024-08-21&end_date=2024-08-22&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&module=%7B%22id%22%3A%224000000004947%22%2C%22type%22%3A%22task%22%7D&view_id=23806000074760021&timelog_group_id=-&frompage=mytimesheet&fetch_by_modified_time=false HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("view_type", "week");
uriBuilder.addParameter("start_date", "2024-08-21");
uriBuilder.addParameter("end_date", "2024-08-22");
uriBuilder.addParameter("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\"}");
uriBuilder.addParameter("module", "{\"id\":\"4000000004947\",\"type\":\"task\"}");
uriBuilder.addParameter("view_id", "23806000074760021");
uriBuilder.addParameter("timelog_group_id", "-");
uriBuilder.addParameter("frompage", "mytimesheet");
uriBuilder.addParameter("fetch_by_modified_time", "false");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'view_type': 'week',
  'start_date': '2024-08-21',
  'end_date': '2024-08-22',
  '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',
  'timelog_group_id': '-',
  'frompage': 'mytimesheet',
  'fetch_by_modified_time': 'false'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
view_type = "week"
start_date = "2024-08-21"
end_date = "2024-08-22"
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"
timelog_group_id =  - 
frompage = "mytimesheet"
fetch_by_modified_time = "false"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("view_type", "week")
    urlBuilder.addQueryParameter("start_date", "2024-08-21")
    urlBuilder.addQueryParameter("end_date", "2024-08-22")
    urlBuilder.addQueryParameter("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\"}")
    urlBuilder.addQueryParameter("module", "{\"id\":\"4000000004947\",\"type\":\"task\"}")
    urlBuilder.addQueryParameter("view_id", "23806000074760021")
    urlBuilder.addQueryParameter("timelog_group_id", "-")
    urlBuilder.addQueryParameter("frompage", "mytimesheet")
    urlBuilder.addQueryParameter("fetch_by_modified_time", "false")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"week" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedStart_date = [@"2024-08-21" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedEnd_date = [@"2024-08-22" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFilter = [@"{\"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\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedModule = [@"{\"id\":\"4000000004947\",\"type\":\"task\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"23806000074760021" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedTimelog_group_id = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFrompage = [@"mytimesheet" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFetch_by_modified_time = [@"false" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)?page=%@&per_page=%@&view_type=%@&start_date=%@&end_date=%@&filter=%@&module=%@&view_id=%@&timelog_group_id=%@&frompage=%@&fetch_by_modified_time=%@", encodedPage, encodedPer_page, encodedView_type, encodedStart_date, encodedEnd_date, encodedFilter, encodedModule, encodedView_id, encodedTimelog_group_id, encodedFrompage, encodedFetch_by_modified_time];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_view_type = Uri.pct_encode "week" in
  let enc_start_date = Uri.pct_encode "2024-08-21" in
  let enc_end_date = Uri.pct_encode "2024-08-22" in
  let enc_filter = Uri.pct_encode "{\"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\"}" in
  let enc_module = Uri.pct_encode "{\"id\":\"4000000004947\",\"type\":\"task\"}" in
  let enc_view_id = Uri.pct_encode "23806000074760021" in
  let enc_timelog_group_id = Uri.pct_encode "-" in
  let enc_frompage = Uri.pct_encode "mytimesheet" in
  let enc_fetch_by_modified_time = Uri.pct_encode "false" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&view_type=" ^ enc_view_type ^ "&start_date=" ^ enc_start_date ^ "&end_date=" ^ enc_end_date ^ "&filter=" ^ enc_filter ^ "&module=" ^ enc_module ^ "&view_id=" ^ enc_view_id ^ "&timelog_group_id=" ^ enc_timelog_group_id ^ "&frompage=" ^ enc_frompage ^ "&fetch_by_modified_time=" ^ enc_fetch_by_modified_time) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    view_type = "week"
    start_date = "2024-08-21"
    end_date = "2024-08-22"
    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"
    timelog_group_id = "-"
    frompage = "mytimesheet"
    fetch_by_modified_time = "false"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)"

params <- list(
  page = "1",
  per_page = "10",
  view_type = "week",
  start_date = "2024-08-21",
  end_date = "2024-08-22",
  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",
  timelog_group_id = "-",
  frompage = "mytimesheet",
  fetch_by_modified_time = "false"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "view_type", value: "week"),
    URLQueryItem(name: "start_date", value: "2024-08-21"),
    URLQueryItem(name: "end_date", value: "2024-08-22"),
    URLQueryItem(name: "filter", value: "{\"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\"}"),
    URLQueryItem(name: "module", value: "{\"id\":\"4000000004947\",\"type\":\"task\"}"),
    URLQueryItem(name: "view_id", value: "23806000074760021"),
    URLQueryItem(name: "timelog_group_id", value: "-"),
    URLQueryItem(name: "frompage", value: "mytimesheet"),
    URLQueryItem(name: "fetch_by_modified_time", value: "false")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" view_type : "week" start_date : "2024-08-21" end_date : "2024-08-22" 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" timelog_group_id : - frompage : "mytimesheet" fetch_by_modified_time : "false"

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.zoho.com/file?fs=thumb&exp=600&ID=24925026", "name" : "Mark", "email" : "mark.taylor@zylker.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" : "Time log details:\nStart Time - 08-06-2024 11:03 AM End Time - 08-06-2024 12:03 PM\nTime spent - 01:00", "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.taylor@zylker.com", "status" : "Approved" }, "project" : { "name" : "Software Development", "id" : "8000000005863" }, "type" : "task", "added_by" : { "zpuid" : "8000000002411", "name" : "Mark", "email" : "mark.taylor@zylker.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" } } ] }
Bulk Add Time logs

Add multiple time logs to the Zoho Projects portal. Add multiple time log entries to a specific portal. Use this API to submit multiple time log entries in a single request.

POST

/api/v3/portal/[PORTALID]/addbulktimelogs

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
log_object

JSONArray

required

Enter the list of time log entries to add in bulk.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--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 time_logs.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","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"}]'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs";
params = Map();
params.put("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 time_logs.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","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"}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs');
url.searchParams.append('"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 time_logs.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","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"}]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs")
params = {
  ""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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    '"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 time_logs.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","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"}]',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs"

params = {
    ""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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_"log_object" = curl_easy_escape(curl, "[{\"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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs?\"log_object\"=%s", enc_"log_object");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_"log_object");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query[""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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_"log_object" = curl_easy_escape(curl, "[{\"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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs";
        url += "?"log_object"=" + std::string(enc_"log_object");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_"log_object");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"log_object" (java.net.URLEncoder/encode "[{\"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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs" "?"log_object"=" enc-"log_object")]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs", nil)
    q := req.URL.Query()
    q.Add(""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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs?%22log_object%22=%5B%7B%22project_id%22%3A%2223806000074760021%22%2C%22item_id%22%3A%22-%22%2C%22log_name%22%3A%22Enter+a+name+for+the+general+time+log%22%2C%22type%22%3A%22task%22%2C%22date%22%3A%222024-12-11%22%2C%22bill_status%22%3A%22Billable%22%2C%22hours%22%3A%2201.00%22%2C%22notes%22%3A%22The+Timesheet+API+allows+users+to+manage+their+work+hours+by+tracking+time+entries%2C+submitting+time_logs.%22%2C%22owner%22%3A%22-%22%2C%22owner_zpuid%22%3A%228000000008075%22%2C%22approver%22%3A%2222822935%22%2C%22start_time%22%3A%2201%3A00+AM%22%2C%22end_time%22%3A%2202%3A00+AM%22%2C%22cf_user_picklist%22%3A%22-%22%2C%22cf_single_line%22%3A%22-%22%2C%22cf_multi_line%22%3A%22-%22%2C%22cf_email%22%3A%22-%22%2C%22cf_date%22%3A%22-%22%2C%22cf_decimal%22%3A%22-%22%2C%22cf_check_box%22%3A%22-%22%2C%22sprints_logid%22%3A%22-%22%2C%22status%22%3A%22on%22%2C%22unique_key%22%3A%22-%22%2C%22cost_rate_per_hour%22%3A%221%22%7D%5D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/addbulktimelogs");
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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs';

const params = new URLSearchParams({
  '"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 time_logs.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","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"}]'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
"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 time_logs.","owner":"-","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","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"}]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encoded"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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs?"log_object"=%@", encoded"log_object"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_"log_object" = Uri.pct_encode "[{\"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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs" ^ "?"log_object"=" ^ enc_"log_object") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    "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 time_logs.`",`"owner`":`"-`",`"owner_zpuid`":`"8000000008075`",`"approver`":`"22822935`",`"start_time`":`"01:00 AM`",`"end_time`":`"02:00 AM`",`"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`"}]"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs"

params <- list(
  "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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/addbulktimelogs")!
components.queryItems = [
    URLQueryItem(name: ""log_object"", value: "[{\"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 time_logs.\",\"owner\":\"-\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"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\"}]")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 time_logs.", "owner" : "-", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "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.zoho.com/file?fs=thumb&exp=600&ID=21705927", "name" : "Mark Taylor", "email" : "mark.taylor@zylker.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" : "Time log details:\nStart Time - 04-29-2024 09:00 AM End Time - 04-29-2024 10:00 AM\nTime spent - 01:00", "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 Taylor", "email" : "mark.taylor@zylker.com", "zuid" : 21705927 }, "billing_status" : "Billable", "id" : "5000000009007", "log_hour" : "01:00" }, { "owner" : { "zpuid" : "5000000002151", "image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=21705927", "name" : "Mark Taylor", "email" : "mark.taylor@zylker.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" : "Time log details:\nStart Time - 04-29-2024 10:00 AM End Time - 04-29-2024 11:00 AM\nTime spent - 01:00", "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 Taylor", "email" : "mark.taylor@zylker.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" } } ] }
Bulk Update Time Logs

Update multiple time log entries in the Zoho Projects portal. Use this API to modify multiple time log entries in a single request.

PATCH

/api/v3/portal/[PORTALID]/logs

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Parameter

Param Name
Data Type
Description
id

long

required

Enter the ID of the time log to update.

date

String

Enter the date of the time log. Format: YYYY-MM-DD

bill_status

String

Enter the billing status of the time log. Accepted values: Billable, Non Billable

approval_status

String

Enter the approval status of the time log. Accepted values: Approved, Unapproved, Rejected

hours

String

Enter the number of hours to log.

notes

String

max length : 10000

Enter any additional notes for the time log.

owner_zpuid

long

Enter the ZPUID of the time log owner.

approver

long

Enter the ZPUID of the approver for the time log.

start_time

String

Enter the start time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

end_time

String

Enter the end time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

module

String

required

Enter the module associated with the time log. Accepted values: task, issue, general

cf_number

long

Enter the name of the numeric custom field used during creation.

cf_user_picklist

long

Enter the name of the user picklist custom field used during creation.

cf_single_line

String

max length : 255

Enter the name of the single-line custom field used during creation.

cf_multi_line

String

max length : 2000

Enter the name of the multi-line text custom field used during creation.

cf_email

String

max length : 255

Enter the name of the email custom field used during creation.

cf_date

String

Enter the name of the date custom field used during creation.

cf_decimal

String

Enter the name of the decimal custom field used during creation.

cf_check_box

String

Enter the name of the checkbox custom field used during creation.

extra_data

JSONObject

Enter additional time entry details to log alongside the main entry.

cost_rate_per_hour

double

Enter the cost per hour for the time log.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/logs' \
-H 'Authorization: Bearer 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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/logs";
params = List();
params.add({"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"});
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/logs');

const payload = JSON.stringify([{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]);

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/logs")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '[{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/logs";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '[{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/logs"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '[{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/logs");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\"}]");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/logs");
request.Content = new StringContent(
    @"[{""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 time_logs."",""owner_zpuid"":""8000000008075"",""approver"":""22822935"",""start_time"":""01:00 AM"",""end_time"":""02:00 AM"",""module"":{""id"":""4000000004947"",""type"":""task""},""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 time_logs.""},""cost_rate_per_hour"":""1""}]",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/logs");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\"}]");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/logs"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "[{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\"}]"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("[{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\"}]")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/logs", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/logs HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\"}]";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/logs';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}])
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
[{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/logs")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""[{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/logs"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"[{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\"}]" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/logs" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
[{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/logs" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/logs"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "[{\"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 time_logs.\",\"owner_zpuid\":\"8000000008075\",\"approver\":\"22822935\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"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 time_logs.\"},\"cost_rate_per_hour\":\"1\"}]"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/logs")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
[{"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 time_logs.","owner_zpuid":"8000000008075","approver":"22822935","start_time":"01:00 AM","end_time":"02:00 AM","module":{"id":"4000000004947","type":"task"},"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 time_logs."},"cost_rate_per_hour":"1"}]
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 time_logs.", "owner_zpuid" : "8000000008075", "approver" : "22822935", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "module" : { "id" : "4000000004947", "type" : "task" }, "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 time_logs." }, "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" : "none", "skip_type" : "execute", "time_span" : "1", "next_schedule_time" : "2024-09-04T06:00:00.000Z", "name" : "testing api", "repetative_type" : "daily", "id" : "4000000032069", "status" : "on" }, "created_by" : { "zpuid" : "4000000002411", "name" : "Tyler", "id" : "4000000002411" }, "filter" : { "criteria" : [ { "cfid" : 11, "criteria_condition" : "is", "value" : [ "4000000005668" ] } ], "pattern" : "1" }, "notify_users" : [ { "zpuid" : "4000000002411", "name" : "Tyler", "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" }
Bulk Delete Time Logs

Remove multiple time log entries from a specific portal.

DELETE

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete";
params = Map();
params.put("id", "4000000062001");
params.put("module", {"id":"4000000004947","type":"task"});
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete');

const payload = JSON.stringify({"id":"4000000062001","module":{"id":"4000000004947","type":"task"}});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_POSTFIELDS => '{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}'

response = requests.delete(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete");
request.Content = new StringContent(
    @"{""id"":""4000000062001"",""module"":{""id"":""4000000004947"",""type"":""task""}}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"id\":\"4000000062001\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"id\":\"4000000062001\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}")
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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|timelogs)/bulkdelete");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"id":"4000000062001","module":{"id":"4000000004947","type":"task"}})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"id\":\"4000000062001\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}|json} in
  Lwt_main.run (
    Client.delete ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete" -Method DELETE -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"id\":\"4000000062001\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"}}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/bulkdelete")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"id":"4000000062001","module":{"id":"4000000004947","type":"task"}}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "id" : "4000000062001", "module" : { "id" : "4000000004947", "type" : "task" } }

Sample Response

200
Timesheet Reports

This module covers operations related to time log reports within Zoho Projects. Use this API to retrieve time log reports at the portal or project level.

Get Time Log Report(Portal)

Retrieve time log reports from the Zoho Projects portal.

GET

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/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 of the report range. Format: YYYY-MM-DD

JSONObject

Enter the filter criteria to narrow down the report results.

view_id

long

Enter the ID of the custom view to apply to the report.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report?page=1&per_page=10&report_type=user&view_type=week&start_date=2024-08-21&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&view_id=23806000074760021' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("report_type", "user");
params.put("view_type", "week");
params.put("start_date", "2024-08-21");
params.put("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"});
params.put("view_id", "23806000074760021");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('report_type', 'user');
url.searchParams.append('view_type', 'week');
url.searchParams.append('start_date', '2024-08-21');
url.searchParams.append('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"}');
url.searchParams.append('view_id', '23806000074760021');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report")
params = {
  "page" => "1",
  "per_page" => "10",
  "report_type" => "user",
  "view_type" => "week",
  "start_date" => "2024-08-21",
  "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"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'report_type' => 'user',
    'view_type' => 'week',
    'start_date' => '2024-08-21',
    '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',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report"

params = {
    "page": "1",
    "per_page": "10",
    "report_type": "user",
    "view_type": "week",
    "start_date": "2024-08-21",
    "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"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_report_type = curl_easy_escape(curl, "user", 0);
        char *enc_view_type = curl_easy_escape(curl, "week", 0);
        char *enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char *enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char *enc_view_id = curl_easy_escape(curl, "23806000074760021", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report?page=%s&per_page=%s&report_type=%s&view_type=%s&start_date=%s&filter=%s&view_id=%s", enc_page, enc_per_page, enc_report_type, enc_view_type, enc_start_date, enc_filter, enc_view_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_report_type);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_filter);
        curl_free(enc_view_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["report_type"] = "user";
query["view_type"] = "week";
query["start_date"] = "2024-08-21";
query["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\"}";
query["view_id"] = "23806000074760021";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_report_type = curl_easy_escape(curl, "user", 0);
        char* enc_view_type = curl_easy_escape(curl, "week", 0);
        char* enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char* enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char* enc_view_id = curl_easy_escape(curl, "23806000074760021", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&report_type=" + std::string(enc_report_type);
        url += "&view_type=" + std::string(enc_view_type);
        url += "&start_date=" + std::string(enc_start_date);
        url += "&filter=" + std::string(enc_filter);
        url += "&view_id=" + std::string(enc_view_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_report_type);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_filter);
        curl_free(enc_view_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-report_type (java.net.URLEncoder/encode "user" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "week" "UTF-8")
      enc-start_date (java.net.URLEncoder/encode "2024-08-21" "UTF-8")
      enc-filter (java.net.URLEncoder/encode "{\"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\"}" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "23806000074760021" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report" "?page=" enc-page "&per_page=" enc-per_page "&report_type=" enc-report_type "&view_type=" enc-view_type "&start_date=" enc-start_date "&filter=" enc-filter "&view_id=" enc-view_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("report_type", "user")
    q.Add("view_type", "week")
    q.Add("start_date", "2024-08-21")
    q.Add("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\"}")
    q.Add("view_id", "23806000074760021")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report?page=1&per_page=10&report_type=user&view_type=week&start_date=2024-08-21&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&view_id=23806000074760021 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/report");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("report_type", "user");
uriBuilder.addParameter("view_type", "week");
uriBuilder.addParameter("start_date", "2024-08-21");
uriBuilder.addParameter("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\"}");
uriBuilder.addParameter("view_id", "23806000074760021");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'report_type': 'user',
  'view_type': 'week',
  'start_date': '2024-08-21',
  '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'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
report_type = "user"
view_type = "week"
start_date = "2024-08-21"
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"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("report_type", "user")
    urlBuilder.addQueryParameter("view_type", "week")
    urlBuilder.addQueryParameter("start_date", "2024-08-21")
    urlBuilder.addQueryParameter("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\"}")
    urlBuilder.addQueryParameter("view_id", "23806000074760021")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedReport_type = [@"user" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"week" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedStart_date = [@"2024-08-21" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFilter = [@"{\"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\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"23806000074760021" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report?page=%@&per_page=%@&report_type=%@&view_type=%@&start_date=%@&filter=%@&view_id=%@", encodedPage, encodedPer_page, encodedReport_type, encodedView_type, encodedStart_date, encodedFilter, encodedView_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_report_type = Uri.pct_encode "user" in
  let enc_view_type = Uri.pct_encode "week" in
  let enc_start_date = Uri.pct_encode "2024-08-21" in
  let enc_filter = Uri.pct_encode "{\"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\"}" in
  let enc_view_id = Uri.pct_encode "23806000074760021" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&report_type=" ^ enc_report_type ^ "&view_type=" ^ enc_view_type ^ "&start_date=" ^ enc_start_date ^ "&filter=" ^ enc_filter ^ "&view_id=" ^ enc_view_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    report_type = "user"
    view_type = "week"
    start_date = "2024-08-21"
    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"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report"

params <- list(
  page = "1",
  per_page = "10",
  report_type = "user",
  view_type = "week",
  start_date = "2024-08-21",
  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"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/report")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "report_type", value: "user"),
    URLQueryItem(name: "view_type", value: "week"),
    URLQueryItem(name: "start_date", value: "2024-08-21"),
    URLQueryItem(name: "filter", value: "{\"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\"}"),
    URLQueryItem(name: "view_id", value: "23806000074760021")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" report_type : "user" view_type : "week" start_date : "2024-08-21" 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 Time Log Report(Project)

Retrieve time log reports from a project

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/(timesheet|timelogs)/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 of the report range. Format: YYYY-MM-DD

JSONObject

Enter the filter criteria to narrow down the report results.

view_id

long

Enter the ID of the custom view to apply to the report.

timelog_group_id

long

Enter the ID of the timesheet group to retrieve its report.

custom_range

JSONObject

Enter the custom date range for the report.

frompage

String

Enter the source page from which the report is being accessed. Accepted values: timeloggroup_draft, timeloggroup_update, timeloggroup_regenerate

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report?page=1&per_page=10&report_type=user&view_type=week&start_date=2024-08-21&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&view_id=23806000074760021&timelog_group_id=-&%22custom_range%22=%7B%22start_date%22%3A%222024-08-21%22%2C%22end_date%22%3A%222024-08-22%22%7D&frompage=mytimesheet' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("report_type", "user");
params.put("view_type", "week");
params.put("start_date", "2024-08-21");
params.put("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"});
params.put("view_id", "23806000074760021");
params.put("timelog_group_id", "-");
params.put("custom_range", {"start_date":"2024-08-21","end_date":"2024-08-22"});
params.put("frompage", "mytimesheet");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('report_type', 'user');
url.searchParams.append('view_type', 'week');
url.searchParams.append('start_date', '2024-08-21');
url.searchParams.append('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"}');
url.searchParams.append('view_id', '23806000074760021');
url.searchParams.append('timelog_group_id', '-');
url.searchParams.append('"custom_range"', '{"start_date":"2024-08-21","end_date":"2024-08-22"}');
url.searchParams.append('frompage', 'mytimesheet');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report")
params = {
  "page" => "1",
  "per_page" => "10",
  "report_type" => "user",
  "view_type" => "week",
  "start_date" => "2024-08-21",
  "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",
  "timelog_group_id" => "-",
  ""custom_range"" => "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}",
  "frompage" => "mytimesheet"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'report_type' => 'user',
    'view_type' => 'week',
    'start_date' => '2024-08-21',
    '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',
    'timelog_group_id' => '-',
    '"custom_range"' => '{"start_date":"2024-08-21","end_date":"2024-08-22"}',
    'frompage' => 'mytimesheet',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report"

params = {
    "page": "1",
    "per_page": "10",
    "report_type": "user",
    "view_type": "week",
    "start_date": "2024-08-21",
    "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",
    "timelog_group_id": "-",
    ""custom_range"": "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}",
    "frompage": "mytimesheet"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_report_type = curl_easy_escape(curl, "user", 0);
        char *enc_view_type = curl_easy_escape(curl, "week", 0);
        char *enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char *enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char *enc_view_id = curl_easy_escape(curl, "23806000074760021", 0);
        char *enc_timelog_group_id = curl_easy_escape(curl, "-", 0);
        char *enc_"custom_range" = curl_easy_escape(curl, "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}", 0);
        char *enc_frompage = curl_easy_escape(curl, "mytimesheet", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report?page=%s&per_page=%s&report_type=%s&view_type=%s&start_date=%s&filter=%s&view_id=%s&timelog_group_id=%s&\"custom_range\"=%s&frompage=%s", enc_page, enc_per_page, enc_report_type, enc_view_type, enc_start_date, enc_filter, enc_view_id, enc_timelog_group_id, enc_"custom_range", enc_frompage);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_report_type);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_filter);
        curl_free(enc_view_id);
        curl_free(enc_timelog_group_id);
        curl_free(enc_"custom_range");
        curl_free(enc_frompage);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["report_type"] = "user";
query["view_type"] = "week";
query["start_date"] = "2024-08-21";
query["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\"}";
query["view_id"] = "23806000074760021";
query["timelog_group_id"] = "-";
query[""custom_range""] = "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}";
query["frompage"] = "mytimesheet";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_report_type = curl_easy_escape(curl, "user", 0);
        char* enc_view_type = curl_easy_escape(curl, "week", 0);
        char* enc_start_date = curl_easy_escape(curl, "2024-08-21", 0);
        char* enc_filter = curl_easy_escape(curl, "{\"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\"}", 0);
        char* enc_view_id = curl_easy_escape(curl, "23806000074760021", 0);
        char* enc_timelog_group_id = curl_easy_escape(curl, "-", 0);
        char* enc_"custom_range" = curl_easy_escape(curl, "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}", 0);
        char* enc_frompage = curl_easy_escape(curl, "mytimesheet", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&report_type=" + std::string(enc_report_type);
        url += "&view_type=" + std::string(enc_view_type);
        url += "&start_date=" + std::string(enc_start_date);
        url += "&filter=" + std::string(enc_filter);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&timelog_group_id=" + std::string(enc_timelog_group_id);
        url += "&"custom_range"=" + std::string(enc_"custom_range");
        url += "&frompage=" + std::string(enc_frompage);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_report_type);
        curl_free(enc_view_type);
        curl_free(enc_start_date);
        curl_free(enc_filter);
        curl_free(enc_view_id);
        curl_free(enc_timelog_group_id);
        curl_free(enc_"custom_range");
        curl_free(enc_frompage);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-report_type (java.net.URLEncoder/encode "user" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "week" "UTF-8")
      enc-start_date (java.net.URLEncoder/encode "2024-08-21" "UTF-8")
      enc-filter (java.net.URLEncoder/encode "{\"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\"}" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "23806000074760021" "UTF-8")
      enc-timelog_group_id (java.net.URLEncoder/encode "-" "UTF-8")
      enc-"custom_range" (java.net.URLEncoder/encode "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}" "UTF-8")
      enc-frompage (java.net.URLEncoder/encode "mytimesheet" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report" "?page=" enc-page "&per_page=" enc-per_page "&report_type=" enc-report_type "&view_type=" enc-view_type "&start_date=" enc-start_date "&filter=" enc-filter "&view_id=" enc-view_id "&timelog_group_id=" enc-timelog_group_id "&"custom_range"=" enc-"custom_range" "&frompage=" enc-frompage)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("report_type", "user")
    q.Add("view_type", "week")
    q.Add("start_date", "2024-08-21")
    q.Add("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\"}")
    q.Add("view_id", "23806000074760021")
    q.Add("timelog_group_id", "-")
    q.Add(""custom_range"", "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}")
    q.Add("frompage", "mytimesheet")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report?page=1&per_page=10&report_type=user&view_type=week&start_date=2024-08-21&filter=%7B%22criteria%22%3A%5B%7B%22field_name%22%3A%22user%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%224000000002411%22%5D%7D%2C%7B%22field_name%22%3A%22created_time%22%2C%22criteria_condition%22%3A%22Yesterday%22%2C%22value%22%3A%5B%22Yesterday%22%5D%7D%2C%7B%22field_name%22%3A%22billstatus%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Non+Billable%22%5D%7D%2C%7B%22field_name%22%3A%22approval_status%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22Approved%22%2C%22Unapproved%22%5D%7D%2C%7B%22field_name%22%3A%22ts_single%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%22single%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2+AND+3+AND+4%22%7D&view_id=23806000074760021&timelog_group_id=-&%22custom_range%22=%7B%22start_date%22%3A%222024-08-21%22%2C%22end_date%22%3A%222024-08-22%22%7D&frompage=mytimesheet HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/report");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("report_type", "user");
uriBuilder.addParameter("view_type", "week");
uriBuilder.addParameter("start_date", "2024-08-21");
uriBuilder.addParameter("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\"}");
uriBuilder.addParameter("view_id", "23806000074760021");
uriBuilder.addParameter("timelog_group_id", "-");
uriBuilder.addParameter(""custom_range"", "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}");
uriBuilder.addParameter("frompage", "mytimesheet");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'report_type': 'user',
  'view_type': 'week',
  'start_date': '2024-08-21',
  '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',
  'timelog_group_id': '-',
  '"custom_range"': '{"start_date":"2024-08-21","end_date":"2024-08-22"}',
  'frompage': 'mytimesheet'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
report_type = "user"
view_type = "week"
start_date = "2024-08-21"
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"
timelog_group_id =  - 
"custom_range" = {"start_date":"2024-08-21","end_date":"2024-08-22"}
frompage = "mytimesheet"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("report_type", "user")
    urlBuilder.addQueryParameter("view_type", "week")
    urlBuilder.addQueryParameter("start_date", "2024-08-21")
    urlBuilder.addQueryParameter("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\"}")
    urlBuilder.addQueryParameter("view_id", "23806000074760021")
    urlBuilder.addQueryParameter("timelog_group_id", "-")
    urlBuilder.addQueryParameter(""custom_range"", "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}")
    urlBuilder.addQueryParameter("frompage", "mytimesheet")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedReport_type = [@"user" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"week" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedStart_date = [@"2024-08-21" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFilter = [@"{\"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\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"23806000074760021" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedTimelog_group_id = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"custom_range" = [@"{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFrompage = [@"mytimesheet" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report?page=%@&per_page=%@&report_type=%@&view_type=%@&start_date=%@&filter=%@&view_id=%@&timelog_group_id=%@&"custom_range"=%@&frompage=%@", encodedPage, encodedPer_page, encodedReport_type, encodedView_type, encodedStart_date, encodedFilter, encodedView_id, encodedTimelog_group_id, encoded"custom_range", encodedFrompage];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_report_type = Uri.pct_encode "user" in
  let enc_view_type = Uri.pct_encode "week" in
  let enc_start_date = Uri.pct_encode "2024-08-21" in
  let enc_filter = Uri.pct_encode "{\"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\"}" in
  let enc_view_id = Uri.pct_encode "23806000074760021" in
  let enc_timelog_group_id = Uri.pct_encode "-" in
  let enc_"custom_range" = Uri.pct_encode "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}" in
  let enc_frompage = Uri.pct_encode "mytimesheet" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&report_type=" ^ enc_report_type ^ "&view_type=" ^ enc_view_type ^ "&start_date=" ^ enc_start_date ^ "&filter=" ^ enc_filter ^ "&view_id=" ^ enc_view_id ^ "&timelog_group_id=" ^ enc_timelog_group_id ^ "&"custom_range"=" ^ enc_"custom_range" ^ "&frompage=" ^ enc_frompage) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    report_type = "user"
    view_type = "week"
    start_date = "2024-08-21"
    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"
    timelog_group_id = "-"
    "custom_range" = "{`"start_date`":`"2024-08-21`",`"end_date`":`"2024-08-22`"}"
    frompage = "mytimesheet"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report"

params <- list(
  page = "1",
  per_page = "10",
  report_type = "user",
  view_type = "week",
  start_date = "2024-08-21",
  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",
  timelog_group_id = "-",
  "custom_range" = "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}",
  frompage = "mytimesheet"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/report")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "report_type", value: "user"),
    URLQueryItem(name: "view_type", value: "week"),
    URLQueryItem(name: "start_date", value: "2024-08-21"),
    URLQueryItem(name: "filter", value: "{\"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\"}"),
    URLQueryItem(name: "view_id", value: "23806000074760021"),
    URLQueryItem(name: "timelog_group_id", value: "-"),
    URLQueryItem(name: ""custom_range"", value: "{\"start_date\":\"2024-08-21\",\"end_date\":\"2024-08-22\"}"),
    URLQueryItem(name: "frompage", value: "mytimesheet")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" report_type : "user" view_type : "week" start_date : "2024-08-21" 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" timelog_group_id : - "custom_range" : { "start_date" : "2024-08-21", "end_date" : "2024-08-22" } frompage : "mytimesheet"
Approvers

This module covers operations related to time log approval within Zoho Projects. Use this API to retrieve and update default time log approvers.

Get Default Approver

Retrieve the default time log approver for a user in a specific project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/(timesheet|timelogs)/approver

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
user

long

-

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver?user=-&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver";
params = Map();
params.put("user", "-");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver');
url.searchParams.append('user', '-');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver")
params = {
  "user" => "-",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'user' => '-',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver"

params = {
    "user": "-",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_user = curl_easy_escape(curl, "-", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver?user=%s&page=%s&per_page=%s", enc_user, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_user);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["user"] = "-";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_user = curl_easy_escape(curl, "-", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver";
        url += "?user=" + std::string(enc_user);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_user);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-user (java.net.URLEncoder/encode "-" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver" "?user=" enc-user "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver", nil)
    q := req.URL.Query()
    q.Add("user", "-")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver?user=-&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/approver");
uriBuilder.addParameter("user", "-");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver';

const params = new URLSearchParams({
  'user': '-',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
user =  - 
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("user", "-")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedUser = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver?user=%@&page=%@&per_page=%@", encodedUser, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_user = Uri.pct_encode "-" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver" ^ "?user=" ^ enc_user ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    user = "-"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver"

params <- list(
  user = "-",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver")!
components.queryItems = [
    URLQueryItem(name: "user", value: "-"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

user : - page : "1" per_page : "10"

Sample Response

200{ "approver" : { "name" : "Mark", "id" : "8000000002411", "zuid" : "24925026" } }
Update Default Approver

Modify the default time log approver of the user in a project.

PATCH

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/(timesheet|timelogs)/approver

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Parameter

Param Name
Data Type
Description
user

long

Enter the ZPUID of the user.

approver

long

Enter the ZPUID of the approver.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"user":"-","approver":"22822935"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver";
params = Map();
params.put("user", "-");
params.put("approver", "22822935");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver');

const payload = JSON.stringify({"user":"-","approver":"22822935"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"user":"-","approver":"22822935"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"user":"-","approver":"22822935"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"user":"-","approver":"22822935"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user\":\"-\",\"approver\":\"22822935\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver");
request.Content = new StringContent(
    @"{""user"":""-"",""approver"":""22822935""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user\":\"-\",\"approver\":\"22822935\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"user\":\"-\",\"approver\":\"22822935\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"user\":\"-\",\"approver\":\"22822935\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"user":"-","approver":"22822935"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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|timelogs)/approver");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"user\":\"-\",\"approver\":\"22822935\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"user":"-","approver":"22822935"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"user":"-","approver":"22822935"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"user":"-","approver":"22822935"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"user\":\"-\",\"approver\":\"22822935\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"user":"-","approver":"22822935"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"user":"-","approver":"22822935"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"user\":\"-\",\"approver\":\"22822935\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/approver")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"user":"-","approver":"22822935"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "user" : "-", "approver" : "22822935" }

Sample Response

200{ "approver" : { "name" : "Mark", "id" : "8000000002411", "zuid" : "24925026" }, "name" : "Mark", "id" : "8000000002411", "zuid" : "24925026" }
Pins

This module covers operations related to pinned time logs within Zoho Projects. Use this API to create, update, retrieve, or delete user pins associated with time logs.

Get Pinned Time Logs(Project)

Retrieve all pinned entries from the time logs weekly form for a specific project. Use this API to access the list of pinned time log entries within a project's weekly form.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/(timesheet|timelogs)/pin

OAuth Scope:

ZohoProjects.timesheets.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/pin");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(timesheet|timelogs)/pin")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

201{ "pins" : [ { "user_id" : "86169000000045853", "module" : { "id" : "86169000000338071", "type" : "task" }, "is_billable" : true, "pin_id" : "86169000000396001", "proj_id" : "86169000000338015" }, { "user_id" : "86169000000045853", "module" : { "id" : "86169000000338074", "type" : "task" }, "is_billable" : true, "pin_id" : "86169000000396003", "proj_id" : "86169000000338015" } ] }
Get Pinned Time Logs(Portal)

Retrieve all pinned entries from the time logs weekly form for a specific portal. Use this API to access the list of pinned time log entries across a portal.

GET

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/pin

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
pinId

String

Enter the pin ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin?pinId=23806000067962644' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin";
params = Map();
params.put("pinId", "23806000067962644");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin');
url.searchParams.append('pinId', '23806000067962644');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin")
params = {
  "pinId" => "23806000067962644"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'pinId' => '23806000067962644',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin"

params = {
    "pinId": "23806000067962644"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_pinId = curl_easy_escape(curl, "23806000067962644", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin?pinId=%s", enc_pinId);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_pinId);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["pinId"] = "23806000067962644";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_pinId = curl_easy_escape(curl, "23806000067962644", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin";
        url += "?pinId=" + std::string(enc_pinId);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_pinId);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-pinId (java.net.URLEncoder/encode "23806000067962644" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin" "?pinId=" enc-pinId)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin", nil)
    q := req.URL.Query()
    q.Add("pinId", "23806000067962644")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin?pinId=23806000067962644 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/pin");
uriBuilder.addParameter("pinId", "23806000067962644");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin';

const params = new URLSearchParams({
  'pinId': '23806000067962644'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
pinId = "23806000067962644"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("pinId", "23806000067962644")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPinId = [@"23806000067962644" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin?pinId=%@", encodedPinId];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_pinId = Uri.pct_encode "23806000067962644" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin" ^ "?pinId=" ^ enc_pinId) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    pinId = "23806000067962644"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin"

params <- list(
  pinId = "23806000067962644"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin")!
components.queryItems = [
    URLQueryItem(name: "pinId", value: "23806000067962644")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

pinId : "23806000067962644"

Sample Response

201{ "pins" : [ { "user_id" : "86169000000045853", "module" : { "id" : "86169000000338071", "type" : "task" }, "is_billable" : true, "pin_id" : "86169000000396001", "proj_id" : "86169000000338015" }, { "user_id" : "86169000000045853", "module" : { "id" : "86169000000338074", "type" : "task" }, "is_billable" : true, "pin_id" : "86169000000396003", "proj_id" : "86169000000338015" } ] }
Unpin a Time Log Entry

Remove a pinned entry from the time logs for a portal.

DELETE

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/pin/[PINID]

OAuth Scope:

ZohoProjects.timesheets.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/pin/[PINID]");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Pin Time Log

Pin a time log in the Zoho Projects Portal. Use this API to mark a time log entry as pinned for quick access in the weekly form.

POST

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/pin

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
project_id

long

Enter the ID of the project to pin the time log entry.

module

String

Enter the module name associated with the time log entry.

is_billing

boolean

Specify whether the time log entry is billable. Accepted values: true or false

zpuid

String

Enter the ZPUID of the user to associate with the pin.

sequence

int

Enter the sequence order of the pin in the weekly form.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin";
params = Map();
params.put("project_id", "23806000074760021");
params.put("module", {"id":"4000000004947","type":"task"});
params.put("is_billing", "false");
params.put("zpuid", "4000000002055");
params.put("sequence", "5");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin');

const payload = JSON.stringify({"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin");
request.Content = new StringContent(
    @"{""project_id"":""23806000074760021"",""module"":{""id"":""4000000004947"",""type"":""task""},""is_billing"":""false"",""zpuid"":""4000000002055"",""sequence"":""5""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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|timelogs)/pin");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"project_id\":\"23806000074760021\",\"module\":{\"id\":\"4000000004947\",\"type\":\"task\"},\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"project_id":"23806000074760021","module":{"id":"4000000004947","type":"task"},"is_billing":"false","zpuid":"4000000002055","sequence":"5"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "project_id" : "23806000074760021", "module" : { "id" : "4000000004947", "type" : "task" }, "is_billing" : "false", "zpuid" : "4000000002055", "sequence" : "5" }
Update Time Log Pin

Update an existing pinned entry in the time logs for a portal. Use this API to modify the details of a pinned time log entry in the weekly form.

PATCH

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/pin/[PINID]

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
project_id

long

Enter the ID of the project associated with the pin.

module

String

Enter the module name associated with the pinned time log entry.

is_billing

boolean

Specify whether the time log entry is billable. Accepted values: true or false

zpuid

String

Enter the ZPUID of the user associated with the pin.

sequence

int

Enter the sequence order of the pin in the weekly form.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]";
params = Map();
params.put("project_id", "23806000074760021");
params.put("module", "task");
params.put("is_billing", "false");
params.put("zpuid", "4000000002055");
params.put("sequence", "5");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]');

const payload = JSON.stringify({"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_id\":\"23806000074760021\",\"module\":\"task\",\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]");
request.Content = new StringContent(
    @"{""project_id"":""23806000074760021"",""module"":""task"",""is_billing"":""false"",""zpuid"":""4000000002055"",""sequence"":""5""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_id\":\"23806000074760021\",\"module\":\"task\",\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"project_id\":\"23806000074760021\",\"module\":\"task\",\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"project_id\":\"23806000074760021\",\"module\":\"task\",\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"project_id":"23806000074760021","module":"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|timelogs)/pin/[PINID]");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"project_id\":\"23806000074760021\",\"module\":\"task\",\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"project_id\":\"23806000074760021\",\"module\":\"task\",\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"project_id\":\"23806000074760021\",\"module\":\"task\",\"is_billing\":\"false\",\"zpuid\":\"4000000002055\",\"sequence\":\"5\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/pin/[PINID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"project_id":"23806000074760021","module":"task","is_billing":"false","zpuid":"4000000002055","sequence":"5"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "project_id" : "23806000074760021", "module" : "task", "is_billing" : "false", "zpuid" : "4000000002055", "sequence" : "5" }
Timers

This module covers timer related operations within Zoho Projects. Use this API to start, pause, resume, stop, or delete timers and retrieve timer details by log ID.

Get Running Timers

Retrieve all running timers from the Zoho Projects portal

GET

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/timers

OAuth Scope:

ZohoProjects.timesheets.READ

Query Parameter

Param Name
Data Type
Description
type

String

Enter the type of timers to retrieve. Accepted values: all, generic, task, issue

for_all

String

Specify whether to retrieve timers of all users. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers?type=all&for_all=true' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers";
params = Map();
params.put("type", "all");
params.put("for_all", "true");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers');
url.searchParams.append('type', 'all');
url.searchParams.append('for_all', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers")
params = {
  "type" => "all",
  "for_all" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'type' => 'all',
    'for_all' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers"

params = {
    "type": "all",
    "for_all": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_type = curl_easy_escape(curl, "all", 0);
        char *enc_for_all = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers?type=%s&for_all=%s", enc_type, enc_for_all);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_type);
        curl_free(enc_for_all);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["type"] = "all";
query["for_all"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_type = curl_easy_escape(curl, "all", 0);
        char* enc_for_all = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers";
        url += "?type=" + std::string(enc_type);
        url += "&for_all=" + std::string(enc_for_all);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_type);
        curl_free(enc_for_all);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "all" "UTF-8")
      enc-for_all (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers" "?type=" enc-type "&for_all=" enc-for_all)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers", nil)
    q := req.URL.Query()
    q.Add("type", "all")
    q.Add("for_all", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers?type=all&for_all=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/timers");
uriBuilder.addParameter("type", "all");
uriBuilder.addParameter("for_all", "true");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers';

const params = new URLSearchParams({
  'type': 'all',
  'for_all': 'true'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
type = "all"
for_all = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "all")
    urlBuilder.addQueryParameter("for_all", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedType = [@"all" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFor_all = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers?type=%@&for_all=%@", encodedType, encodedFor_all];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_type = Uri.pct_encode "all" in
  let enc_for_all = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers" ^ "?type=" ^ enc_type ^ "&for_all=" ^ enc_for_all) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    type = "all"
    for_all = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers"

params <- list(
  type = "all",
  for_all = "true"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers")!
components.queryItems = [
    URLQueryItem(name: "type", value: "all"),
    URLQueryItem(name: "for_all", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

type : "all" for_all : "true"

Sample Response

200{ "timer" : [ { "owner" : { "zpuid" : 4000000002521 }, "hours" : "00", "seconds" : "08", "minutes" : "28", "timer_status" : 0, "id" : "4000000042028", "created_date" : "2025-06-18T08:38:23.521Z", "title" : "Generic Timer", "type" : "empty", "time_spent" : "00:28:08" }, { "owner" : { "zpuid" : "4000000002521" }, "hours" : "00", "seconds" : "13", "minutes" : "52", "timer_status" : 0, "project" : { "project_id" : "4000000015157", "project_name" : "Event Planner" }, "id" : "4000000015287", "created_date" : "2025-06-18T08:14:18.719Z", "title" : "Arrange sponsorships", "type" : "task", "time_spent" : "00:52:13" }, { "owner" : { "zpuid" : "4000000002521" }, "timer_status" : 0, "project" : { "project_id" : "4000000015157", "project_name" : "Event Planner" }, "id" : "4000000016025", "created_date" : "2025-06-18T08:37:47.444Z", "title" : "Event Planner Issue 1", "type" : "issue", "time_spent" : "00:28:44" } ] }
Start Timer

Start a new timer for a specific portal.

POST

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/timers

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
entity_id

String

Enter the ID of the entity to start the timer for.

project_id

String

Enter the ID of the project to start the timer for.

module_id

String

Enter the ID of the module to start the timer for.

check_existing_timers

String

Specify whether to check for existing running timers before starting a new one. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers";
params = Map();
params.put("entity_id", "1752587000000094001");
params.put("project_id", "23806000074760021");
params.put("module_id", "1752587000000097269");
params.put("check_existing_timers", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers');

const payload = JSON.stringify({"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"entity_id\":\"1752587000000094001\",\"project_id\":\"23806000074760021\",\"module_id\":\"1752587000000097269\",\"check_existing_timers\":\"true\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers");
request.Content = new StringContent(
    @"{""entity_id"":""1752587000000094001"",""project_id"":""23806000074760021"",""module_id"":""1752587000000097269"",""check_existing_timers"":""true""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"entity_id\":\"1752587000000094001\",\"project_id\":\"23806000074760021\",\"module_id\":\"1752587000000097269\",\"check_existing_timers\":\"true\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"entity_id\":\"1752587000000094001\",\"project_id\":\"23806000074760021\",\"module_id\":\"1752587000000097269\",\"check_existing_timers\":\"true\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"entity_id\":\"1752587000000094001\",\"project_id\":\"23806000074760021\",\"module_id\":\"1752587000000097269\",\"check_existing_timers\":\"true\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"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/(timesheet|timelogs)/timers");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"entity_id\":\"1752587000000094001\",\"project_id\":\"23806000074760021\",\"module_id\":\"1752587000000097269\",\"check_existing_timers\":\"true\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"entity_id\":\"1752587000000094001\",\"project_id\":\"23806000074760021\",\"module_id\":\"1752587000000097269\",\"check_existing_timers\":\"true\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"entity_id\":\"1752587000000094001\",\"project_id\":\"23806000074760021\",\"module_id\":\"1752587000000097269\",\"check_existing_timers\":\"true\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"entity_id":"1752587000000094001","project_id":"23806000074760021","module_id":"1752587000000097269","check_existing_timers":"true"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "entity_id" : "1752587000000094001", "project_id" : "23806000074760021", "module_id" : "1752587000000097269", "check_existing_timers" : "true" }
Get Timer Details by Log ID

Retrieve timer details for a specific time log entry in a project. Use this API to access the timer information associated with a particular time log entry.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers

OAuth Scope:

ZohoProjects.timesheets.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "timer_notes" : [ { "modified_time" : "2024-08-21T10:45:28.048Z", "status" : "start" } ] }
Update Timer Notes by Log ID

Modify the notes for a timer associated with a specific time log entry in a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers

OAuth Scope:

ZohoProjects.timesheets.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/(task|issue)/(timesheet|timelogs)/[(TIMESHEET|TIMELOGS)ID]/timers")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ }
Pause Timer

Pause a running timer in the Zoho Projects portal. Use this API to temporarily stop a running timer without deleting the tracked time.

PATCH

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/timers/[TIMERID]/pause

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
notes

String

Enter any additional notes for the timer.

type

String

Enter the module type of the timer. Accepted values: task, issue, general

log_id

long

Enter the ID of the time log associated with the timer.

entity_id

long

Enter the ID of the module associated with the timer.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause";
params = Map();
params.put("notes", "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.");
params.put("type", "task");
params.put("log_id", "8000000011005");
params.put("entity_id", "1752587000000094001");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause');

const payload = JSON.stringify({"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause");
request.Content = new StringContent(
    @"{""notes"":""The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."",""type"":""task"",""log_id"":""8000000011005"",""entity_id"":""1752587000000094001""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"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/(timesheet|timelogs)/timers/[TIMERID]/pause");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/pause")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.", "type" : "task", "log_id" : "8000000011005", "entity_id" : "1752587000000094001" }
Resume Timer

Resume a paused timer in the Zoho Projects portal. Use this API to continue tracking time on a previously paused timer.

PATCH

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/timers/[TIMERID]/resume

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
notes

String

Enter any additional notes for the timer.

type

String

Enter the module type of the timer. Accepted values: task, issue, general

log_id

long

Enter the ID of the time log associated with the timer.

entity_id

long

Enter the ID of the module associated with the timer.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume";
params = Map();
params.put("notes", "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.");
params.put("type", "task");
params.put("log_id", "8000000011005");
params.put("entity_id", "1752587000000094001");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume');

const payload = JSON.stringify({"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume");
request.Content = new StringContent(
    @"{""notes"":""The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."",""type"":""task"",""log_id"":""8000000011005"",""entity_id"":""1752587000000094001""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"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/(timesheet|timelogs)/timers/[TIMERID]/resume");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\",\"type\":\"task\",\"log_id\":\"8000000011005\",\"entity_id\":\"1752587000000094001\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/resume")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.","type":"task","log_id":"8000000011005","entity_id":"1752587000000094001"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.", "type" : "task", "log_id" : "8000000011005", "entity_id" : "1752587000000094001" }
Stop Timer

Stop a running timer in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/timers/[TIMERID]/stop

OAuth Scope:

ZohoProjects.timesheets.CREATE

Parameter

Param Name
Data Type
Description
item_id

long

Enter the ID of the work item associated with the time log.

log_name

String

max length : 1000

Enter the name of the time log.

date

String

required

Enter the date of the time log. Format: YYYY-MM-DD

project_id

String

Enter the ID of the project associated with the time log.

type

String

required

Enter the module type of the time log. Accepted values: task, issue, general

hours

String

Enter the number of hours to log.

start_time

String

Enter the start time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

end_time

String

Enter the end time of the time log. Accepted values: 12-hour (with AM/PM), 12-hour (without AM/PM), or 24-hour formats. Example: 11:59 PM

bill_status

String

required

Enter the billing status of the time log. Accepted values: Billable, Non Billable

notes

String

max length : 10000

Enter any additional notes for the time log.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop";
params = Map();
params.put("item_id", "-");
params.put("log_name", "Enter a name for the general time log");
params.put("date", "2024-12-11");
params.put("project_id", "23806000074760021");
params.put("type", "task");
params.put("hours", "01.00");
params.put("start_time", "01:00 AM");
params.put("end_time", "02:00 AM");
params.put("bill_status", "Billable");
params.put("notes", "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop');

const payload = JSON.stringify({"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"item_id\":\"-\",\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"project_id\":\"23806000074760021\",\"type\":\"task\",\"hours\":\"01.00\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"bill_status\":\"Billable\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop");
request.Content = new StringContent(
    @"{""item_id"":""-"",""log_name"":""Enter a name for the general time log"",""date"":""2024-12-11"",""project_id"":""23806000074760021"",""type"":""task"",""hours"":""01.00"",""start_time"":""01:00 AM"",""end_time"":""02:00 AM"",""bill_status"":""Billable"",""notes"":""The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"item_id\":\"-\",\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"project_id\":\"23806000074760021\",\"type\":\"task\",\"hours\":\"01.00\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"bill_status\":\"Billable\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"item_id\":\"-\",\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"project_id\":\"23806000074760021\",\"type\":\"task\",\"hours\":\"01.00\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"bill_status\":\"Billable\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"item_id\":\"-\",\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"project_id\":\"23806000074760021\",\"type\":\"task\",\"hours\":\"01.00\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"bill_status\":\"Billable\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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|timelogs)/timers/[TIMERID]/stop");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"item_id\":\"-\",\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"project_id\":\"23806000074760021\",\"type\":\"task\",\"hours\":\"01.00\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"bill_status\":\"Billable\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"item_id\":\"-\",\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"project_id\":\"23806000074760021\",\"type\":\"task\",\"hours\":\"01.00\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"bill_status\":\"Billable\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"item_id\":\"-\",\"log_name\":\"Enter a name for the general time log\",\"date\":\"2024-12-11\",\"project_id\":\"23806000074760021\",\"type\":\"task\",\"hours\":\"01.00\",\"start_time\":\"01:00 AM\",\"end_time\":\"02:00 AM\",\"bill_status\":\"Billable\",\"notes\":\"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs.\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]/stop")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"item_id":"-","log_name":"Enter a name for the general time log","date":"2024-12-11","project_id":"23806000074760021","type":"task","hours":"01.00","start_time":"01:00 AM","end_time":"02:00 AM","bill_status":"Billable","notes":"The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs."}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "item_id" : "-", "log_name" : "Enter a name for the general time log", "date" : "2024-12-11", "project_id" : "23806000074760021", "type" : "task", "hours" : "01.00", "start_time" : "01:00 AM", "end_time" : "02:00 AM", "bill_status" : "Billable", "notes" : "The Timesheet API allows users to manage their work hours by tracking time entries, submitting time_logs." }
Delete Timer

Remove a timer entry from the Zoho Projects portal. Use this API to delete a timer that is no longer needed.

DELETE

/api/v3/portal/[PORTALID]/(timesheet|timelogs)/timers/[TIMERID]

OAuth Scope:

ZohoProjects.timesheets.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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|timelogs)/timers/[TIMERID]");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/(timesheet|timelogs)/timers/[TIMERID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Settings

This module covers operations related to time log settings within Zoho Projects. Use this API to retrieve, update, or configure metadata and settings related to time logs.

Get Time Log Settings Metadata

Retrieve the metadata for time log settings in a specific portal. Use this API to access the available options and configurations for time log settings.

GET

/api/v3/portal/[PORTALID]/settings/timelog/meta-data

OAuth Scope:

ZohoProjects.timesheets.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog/meta-data")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Time Log Settings

Retrieve the time log settings for a specific portal. Use this API to access the current configuration of time log settings in a portal.

GET

/api/v3/portal/[PORTALID]/settings/timelog

OAuth Scope:

ZohoProjects.timesheets.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Time Log Settings

Update the time log settings for a specific portal.

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 to restrict time logging for closed tasks and issues. Accepted values: true or false

multi_timer_restriction

boolean

Specify whether to restrict running multiple timers simultaneously. Accepted values: true or false

workhour_restriction

boolean

Specify whether to restrict time logging based on task work hours. Accepted values: true or false

entity_date_restriction

boolean

Specify whether to restrict time logging based on task or issue start and end dates. Accepted values: true or false

allow_unassigned_entity_logs

boolean

Specify whether to allow time logging for unassigned tasks and issues. Accepted values: true or false

zpeople_attendance_restriction

boolean

Specify whether to restrict time logging based on Zoho People check-in and check-out time. Accepted values: true or false

restrict_timelogs

JSONObject

Enter the restriction settings for time logs.

timelog_configuration

JSONObject

Enter the configuration settings for time logs.

overlap_restriction

String

Enter the overlap restriction for time logs. Accepted values: allow, warn, restrict

period_settings

JSONObject

Enter the period restriction settings for time logging.

loghour_restriction

JSONObject

Enter the daily and weekly hour limit settings for time logging.

JSONObject

Enter the reminder settings for time logging.

JSONObject

Enter the approval settings for time logs.

is_draft_enabled

boolean

Specify whether to enable draft mode for timesheets. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog";
params = Map();
params.put("allow_timelog_for", "everyone");
params.put("closed_entity_restriction", "true");
params.put("multi_timer_restriction", "false");
params.put("workhour_restriction", "true");
params.put("entity_date_restriction", "-");
params.put("allow_unassigned_entity_logs", "-");
params.put("zpeople_attendance_restriction", "-");
params.put("restrict_timelogs", {"weekend":"-","holiday":"-","zpeople_leave":"-"});
params.put("timelog_configuration", {"log_type":"-","is_tasklog_enabled":"-","is_issuelog_enabled":"-","is_generallog_enabled":"-"});
params.put("overlap_restriction", "allow");
params.put("period_settings", {"past_log":"-","future_log":"-","is_editlog_restricted":"-","period_customized_data":{"past_value":"-","past_unit":"-","future_value":"-","future_unit":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]});
params.put("loghour_restriction", {"is_enabled":"-","max_per_day":"-","max_per_week":"-"});
params.put("reminder", {"is_enabled":"-","threshold":"-","daily_reminder":{"minutes":"-","condition":"-","notify_running_timers":"-"},"weekly_reminder":{"minutes":"-","condition":"-"},"exclude_reminder_for":{"users":{"add":"-","remove":"-"},"profiles":{"add":"-","remove":"-"}}});
params.put("approval", {"is_enabled":"-","type":"task","is_auto_approval":"-","email_notification":{"is_enabled":"-","frequency":"-","time":"22:00"}});
params.put("is_draft_enabled", "-");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog');

const payload = JSON.stringify({"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"entity_date_restriction\":\"-\",\"allow_unassigned_entity_logs\":\"-\",\"zpeople_attendance_restriction\":\"-\",\"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\":\"-\"},\"past_log_excluded_users\":[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}]}]},\"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\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog");
request.Content = new StringContent(
    @"{""allow_timelog_for"":""everyone"",""closed_entity_restriction"":""true"",""multi_timer_restriction"":""false"",""workhour_restriction"":""true"",""entity_date_restriction"":""-"",""allow_unassigned_entity_logs"":""-"",""zpeople_attendance_restriction"":""-"",""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"":""-""},""past_log_excluded_users"":[{""add"":[{""zpuid"":""4000000002055""}],""remove"":[{""zpuid"":""4000000002055""}]}]},""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"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"entity_date_restriction\":\"-\",\"allow_unassigned_entity_logs\":\"-\",\"zpeople_attendance_restriction\":\"-\",\"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\":\"-\"},\"past_log_excluded_users\":[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}]}]},\"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\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"entity_date_restriction\":\"-\",\"allow_unassigned_entity_logs\":\"-\",\"zpeople_attendance_restriction\":\"-\",\"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\":\"-\"},\"past_log_excluded_users\":[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}]}]},\"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\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"entity_date_restriction\":\"-\",\"allow_unassigned_entity_logs\":\"-\",\"zpeople_attendance_restriction\":\"-\",\"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\":\"-\"},\"past_log_excluded_users\":[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}]}]},\"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\":\"-\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"entity_date_restriction\":\"-\",\"allow_unassigned_entity_logs\":\"-\",\"zpeople_attendance_restriction\":\"-\",\"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\":\"-\"},\"past_log_excluded_users\":[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}]}]},\"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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"entity_date_restriction\":\"-\",\"allow_unassigned_entity_logs\":\"-\",\"zpeople_attendance_restriction\":\"-\",\"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\":\"-\"},\"past_log_excluded_users\":[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}]}]},\"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\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"allow_timelog_for\":\"everyone\",\"closed_entity_restriction\":\"true\",\"multi_timer_restriction\":\"false\",\"workhour_restriction\":\"true\",\"entity_date_restriction\":\"-\",\"allow_unassigned_entity_logs\":\"-\",\"zpeople_attendance_restriction\":\"-\",\"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\":\"-\"},\"past_log_excluded_users\":[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}]}]},\"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\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/timelog")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"allow_timelog_for":"everyone","closed_entity_restriction":"true","multi_timer_restriction":"false","workhour_restriction":"true","entity_date_restriction":"-","allow_unassigned_entity_logs":"-","zpeople_attendance_restriction":"-","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":"-"},"past_log_excluded_users":[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}]}]},"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":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "allow_timelog_for" : "everyone", "closed_entity_restriction" : "true", "multi_timer_restriction" : "false", "workhour_restriction" : "true", "entity_date_restriction" : "-", "allow_unassigned_entity_logs" : "-", "zpeople_attendance_restriction" : "-", "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" : "-" }, "past_log_excluded_users" : [ { "add" : [ { "zpuid" : "4000000002055" } ], "remove" : [ { "zpuid" : "4000000002055" } ] } ] }, "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_excluded_users" : [ { "zpuid" : "5000000002965", "name" : "Monica Hemsworth", "id" : "47913634" } ], "past_log" : "not_allow", "is_editlog_restricted" : false }, "allow_timelog_for" : "owners", "multi_timer_restriction" : "false", "entity_date_restriction" : "true", "allow_unassigned_entity_logs" : "true", "zpeople_attendance_restriction" : "false", "workhour_restriction" : "false" } }
Custom Module Records

This module covers operations related to entities within Custom Modules in Zoho Projects. Use this API to manage comments, attachments, followers, status timeline of records.

Get Record List

Retrieve the list of records from a custom module. Use this API to view records with support for filtering, sorting, and pagination.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description
index

int

Enter the index of the record.

range

int

Enter the range of the record.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria to retrieve specific records.

sort_by

String

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

view_id

long

Enter the custom view ID.

project_id

long

Enter the project ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities?index=1&range=100&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22name%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%2C%22is_this_today%22%3Afalse%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&view_id=4000000001232&project_id=23806000097545166' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities";
params = Map();
params.put("index", "1");
params.put("range", "100");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"});
params.put("sort_by", "ASC(last_modified_time)");
params.put("view_id", "4000000001232");
params.put("project_id", "23806000097545166");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities');
url.searchParams.append('index', '1');
url.searchParams.append('range', '100');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('view_id', '4000000001232');
url.searchParams.append('project_id', '23806000097545166');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities")
params = {
  "index" => "1",
  "range" => "100",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}",
  "sort_by" => "ASC(last_modified_time)",
  "view_id" => "4000000001232",
  "project_id" => "23806000097545166"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'index' => '1',
    'range' => '100',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}',
    'sort_by' => 'ASC(last_modified_time)',
    'view_id' => '4000000001232',
    'project_id' => '23806000097545166',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities"

params = {
    "index": "1",
    "range": "100",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}",
    "sort_by": "ASC(last_modified_time)",
    "view_id": "4000000001232",
    "project_id": "23806000097545166"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_index = curl_easy_escape(curl, "1", 0);
        char *enc_range = curl_easy_escape(curl, "100", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_view_id = curl_easy_escape(curl, "4000000001232", 0);
        char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities?index=%s&range=%s&page=%s&per_page=%s&\"filter\"=%s&sort_by=%s&view_id=%s&project_id=%s", enc_index, enc_range, enc_page, enc_per_page, enc_"filter", enc_sort_by, enc_view_id, enc_project_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_index);
        curl_free(enc_range);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["index"] = "1";
query["range"] = "100";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}";
query["sort_by"] = "ASC(last_modified_time)";
query["view_id"] = "4000000001232";
query["project_id"] = "23806000097545166";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_index = curl_easy_escape(curl, "1", 0);
        char* enc_range = curl_easy_escape(curl, "100", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_view_id = curl_easy_escape(curl, "4000000001232", 0);
        char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities";
        url += "?index=" + std::string(enc_index);
        url += "&range=" + std::string(enc_range);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&view_id=" + std::string(enc_view_id);
        url += "&project_id=" + std::string(enc_project_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_index);
        curl_free(enc_range);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_sort_by);
        curl_free(enc_view_id);
        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-index (java.net.URLEncoder/encode "1" "UTF-8")
      enc-range (java.net.URLEncoder/encode "100" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "4000000001232" "UTF-8")
      enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities" "?index=" enc-index "&range=" enc-range "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&sort_by=" enc-sort_by "&view_id=" enc-view_id "&project_id=" enc-project_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities", nil)
    q := req.URL.Query()
    q.Add("index", "1")
    q.Add("range", "100")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("view_id", "4000000001232")
    q.Add("project_id", "23806000097545166")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities?index=1&range=100&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22name%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%2C%22is_this_today%22%3Afalse%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&view_id=4000000001232&project_id=23806000097545166 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entities");
uriBuilder.addParameter("index", "1");
uriBuilder.addParameter("range", "100");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("view_id", "4000000001232");
uriBuilder.addParameter("project_id", "23806000097545166");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities';

const params = new URLSearchParams({
  'index': '1',
  'range': '100',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}',
  'sort_by': 'ASC(last_modified_time)',
  'view_id': '4000000001232',
  'project_id': '23806000097545166'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
index = "1"
range = "100"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}
sort_by = "ASC(last_modified_time)"
view_id = "4000000001232"
project_id = "23806000097545166"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("index", "1")
    urlBuilder.addQueryParameter("range", "100")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("view_id", "4000000001232")
    urlBuilder.addQueryParameter("project_id", "23806000097545166")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedIndex = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedRange = [@"100" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"4000000001232" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities?index=%@&range=%@&page=%@&per_page=%@&"filter"=%@&sort_by=%@&view_id=%@&project_id=%@", encodedIndex, encodedRange, encodedPage, encodedPer_page, encoded"filter", encodedSort_by, encodedView_id, encodedProject_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_index = Uri.pct_encode "1" in
  let enc_range = Uri.pct_encode "100" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_view_id = Uri.pct_encode "4000000001232" in
  let enc_project_id = Uri.pct_encode "23806000097545166" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities" ^ "?index=" ^ enc_index ^ "&range=" ^ enc_range ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&sort_by=" ^ enc_sort_by ^ "&view_id=" ^ enc_view_id ^ "&project_id=" ^ enc_project_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    index = "1"
    range = "100"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"name`",`"field_name`":`"Risk Name`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"field_name`":`"Risk Name`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`",`"is_this_today`":false}]}],`"pattern`":`"1 AND 2`"}"
    sort_by = "ASC(last_modified_time)"
    view_id = "4000000001232"
    project_id = "23806000097545166"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities"

params <- list(
  index = "1",
  range = "100",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}",
  sort_by = "ASC(last_modified_time)",
  view_id = "4000000001232",
  project_id = "23806000097545166"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities")!
components.queryItems = [
    URLQueryItem(name: "index", value: "1"),
    URLQueryItem(name: "range", value: "100"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "view_id", value: "4000000001232"),
    URLQueryItem(name: "project_id", value: "23806000097545166")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

index : "1" range : "100" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "name", "field_name" : "Risk Name", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "field_name" : "Risk Name", "offset" : "1", "unit" : "days", "prior" : "before", "is_this_today" : false } ] } ], "pattern" : "1 AND 2" } sort_by : "ASC(last_modified_time)" view_id : "4000000001232" project_id : "23806000097545166"

Sample Response

200[ { "id" : "7000000106001", "name" : "Sample10thDec_005", "created_time" : "2025-02-05T11:05:35.935Z", "created_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "updated_time" : "2025-02-05T11:05:35.935Z", "updated_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "status" : { "id" : "7000000062049", "name" : "Active", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "layout" : { "id" : "7000000062013", "name" : "Standard Layout", "is_default" : true, "type" : "public" }, "is_external" : false, "comments_count" : 0, "attachments_count" : 0, "email_booking_std" : "test.beta@zylker.com", "url_booking_std" : "https://projects.localzoho.com/", "check_box_booking_std" : false, "multi_line_booking_std" : "ProjectGroupMapping, ProjCustomFieldsValue, ProjectGroup,\nProjCustomFieldsValue AS ProjCustomFieldsValue\nprojectGroup ON ProjectGroup", "phone_booking_std" : "9876543211", "single_line_std" : "10 abc" } ]
Get Record Details

Retrieve details of a specific record. Use this API to fetch complete information of a record using its ID.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities/[ENTITIEID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entities/[ENTITIEID]");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "id" : "7000000115165", "name" : "entity_26FEb_1229", "created_time" : "2025-02-26T06:59:08.493Z", "created_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "updated_time" : "2025-02-26T06:59:08.493Z", "updated_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "status" : { "id" : "7000000062049", "name" : "Active", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "layout" : { "id" : "7000000062013", "name" : "Standard Layout", "is_default" : true, "type" : "public" }, "is_external" : false, "comments_count" : 0, "attachments_count" : 0, "check_box_booking_std" : false, "multi_line_booking_std" : "Enter the mulit line Text here", "single_line_std" : "asdsd" }
Create Record

Create a record in a custom module. Use this API to add a record with basic details such as name, status, layout, and project.

POST

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
name

String

required
max length : 200

Enter the record name.

description

String

max length : 80000

Enter the record description.

JSONObject

max length : 1000

Enter the status details of the record.

JSONObject

max length : 1000

Enter the layout details of the record.

JSONObject

max length : 1000

Enter the project details for the record.

is_closed

boolean

Specify whether the record is closed.
Accepted values :true or false

is_external

boolean

Specify whether the record is external.
Accepted values :true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities";
params = Map();
params.put("name", "Sample_001");
params.put("description", "Sample content of entity");
params.put("status", {"id":"4000000062001"});
params.put("layout", {"id":"4000000062001"});
params.put("project", {"id":"4000000062001"});
params.put("is_closed", "false");
params.put("is_external", "false");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities');

const payload = JSON.stringify({"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities");
request.Content = new StringContent(
    @"{""name"":""Sample_001"",""description"":""Sample content of entity"",""status"":{""id"":""4000000062001""},""layout"":{""id"":""4000000062001""},""project"":{""id"":""4000000062001""},""is_closed"":""false"",""is_external"":""false""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"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/module/[MODULEID]/entities");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Sample_001", "description" : "Sample content of entity", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "project" : { "id" : "4000000062001" }, "is_closed" : "false", "is_external" : "false" }

Sample Response

200{ "id" : "7000000115165", "name" : "entity_26FEb_1229", "created_time" : "2025-02-26T06:59:08.493Z", "created_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "updated_time" : "2025-02-26T06:59:08.493Z", "updated_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "status" : { "id" : "7000000062049", "name" : "Active", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "layout" : { "id" : "7000000062013", "name" : "Standard Layout", "is_default" : true, "type" : "public" }, "is_external" : false, "comments_count" : 0, "attachments_count" : 0, "check_box_booking_std" : false, "multi_line_booking_std" : "Enter the mulit line Text here", "single_line_std" : "asdsd" }
Update Record

Modify details of an existing record. Use this API to modify fields such as name, status, layout, or other record properties.

PATCH

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities/[ENTITIEID]

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
name

String

max length : 200

Enter the record name.

description

String

max length : 80000

Enter the record description.

JSONObject

max length : 1000

Enter the status details for the record.

JSONObject

max length : 1000

Enter the layout details of the record.

JSONObject

max length : 1000

Enter the project details for the record.

is_closed

boolean

Specify whether the record is closed.
Accepted values :true or false

is_external

boolean

Specify whether the record is external.
Accepted values :true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]";
params = Map();
params.put("name", "Sample_001");
params.put("description", "Sample content of entity");
params.put("status", {"id":"4000000062001"});
params.put("layout", {"id":"4000000062001"});
params.put("project", {"id":"4000000062001"});
params.put("is_closed", "false");
params.put("is_external", "false");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]');

const payload = JSON.stringify({"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");
request.Content = new StringContent(
    @"{""name"":""Sample_001"",""description"":""Sample content of entity"",""status"":{""id"":""4000000062001""},""layout"":{""id"":""4000000062001""},""project"":{""id"":""4000000062001""},""is_closed"":""false"",""is_external"":""false""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"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/module/[MODULEID]/entities/[ENTITIEID]");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Sample_001\",\"description\":\"Sample content of entity\",\"status\":{\"id\":\"4000000062001\"},\"layout\":{\"id\":\"4000000062001\"},\"project\":{\"id\":\"4000000062001\"},\"is_closed\":\"false\",\"is_external\":\"false\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Sample_001","description":"Sample content of entity","status":{"id":"4000000062001"},"layout":{"id":"4000000062001"},"project":{"id":"4000000062001"},"is_closed":"false","is_external":"false"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Sample_001", "description" : "Sample content of entity", "status" : { "id" : "4000000062001" }, "layout" : { "id" : "4000000062001" }, "project" : { "id" : "4000000062001" }, "is_closed" : "false", "is_external" : "false" }

Sample Response

200{ "id" : "7000000115165", "name" : "entity_26FEb_1229", "created_time" : "2025-02-26T06:59:08.493Z", "created_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "updated_time" : "2025-02-26T07:00:31.642Z", "updated_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "status" : { "id" : "7000000062049", "name" : "Active", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "layout" : { "id" : "7000000062013", "name" : "Standard Layout", "is_default" : true, "type" : "public" }, "is_external" : false, "comments_count" : 0, "attachments_count" : 0, "email_booking_std" : "laura.kent@zylker.com", "check_box_booking_std" : false, "multi_line_booking_std" : "Enter the mulit line Text here", "single_line_std" : "asdsd" }
Trash Record

Move a record to recycle bin within Zoho Projects portal.

POST

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities/[ENTITIEID]/trash

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entities/[ENTITIEID]/trash");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/trash")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Restore Record

Restore the trashed record from recycle bin.

POST

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities/[ENTITIEID]/restore

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entities/[ENTITIEID]/restore");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]/restore")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "id" : "7000000063085", "name" : "Book1", "created_time" : "2024-11-13T05:35:35.969Z", "created_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "updated_time" : "2024-11-19T10:07:16.464Z", "updated_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Reece", "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "status" : { "id" : "7000000062049", "name" : "Active", "color" : "#2cc8ba", "color_hexcode" : "#2cc8ba", "is_closed_type" : false }, "layout" : { "id" : "7000000062013", "name" : "Standard Layout", "is_default" : true, "type" : "public" }, "is_external" : false, "comments_count" : 0, "attachments_count" : 0, "email_booking_std" : "test.alpha@zylker.com", "url_booking_std" : "https://sadddas.www", "check_box_booking_std" : true, "multi_line_booking_std" : "This is First multiline Field value", "phone_booking_std" : "9845793424", "num_field_booking_std" : "45678", "single_line_std" : "first single line", "percent_booking_std" : 23.0, "date_filed_booking_std" : "2024-11-20", "currency_field_std" : { "currency_code" : "USD", "formatted_amount" : "$ 123.00", "currency_id" : "7000000015018", "amount" : 123.0 } }
Delete Record

Remove a record permanently from the recycle bin. Use this API to remove a record completely.

DELETE

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities/[ENTITIEID]

OAuth Scope:

ZohoProjects.portals.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entities/[ENTITIEID]");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/[ENTITIEID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Get Status Timeline

Retrieve the status change history of a record.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/status-timeline

OAuth Scope:

ZohoProjects.portals.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/status-timeline");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/status-timeline")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "status_timeline" : [ { "updated_status" : { "name" : "Active", "id" : "7000000116049", "color" : "#2cc8ba", "is_closed" : false }, "updated_on" : "2025-02-26T10:36:45.858Z", "updated_by" : { "actionZpuid" : "7000000002411", "id" : "25450833", "display_name" : "Reece Turner", "email" : "reece.turner@zylker.com" }, "previous_status" : { "color" : "#2cc8ba", "name" : "Inactive", "is_closed" : false, "id" : "7000000111524" } } ] }
Get Records Count

Retrieve the total number of records in a module. Use this API with filters to get count based on criteria.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entities/count

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description

JSONObject

Enter the filter criteria to count specific records.

view_id

long

Enter the custom view ID.

project_id

long

Enter the project ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count?%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22name%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%2C%22is_this_today%22%3Afalse%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&view_id=4000000001232&project_id=23806000097545166' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count";
params = Map();
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"});
params.put("view_id", "4000000001232");
params.put("project_id", "23806000097545166");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}');
url.searchParams.append('view_id', '4000000001232');
url.searchParams.append('project_id', '23806000097545166');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count")
params = {
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}",
  "view_id" => "4000000001232",
  "project_id" => "23806000097545166"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}',
    'view_id' => '4000000001232',
    'project_id' => '23806000097545166',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count"

params = {
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}",
    "view_id": "4000000001232",
    "project_id": "23806000097545166"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_view_id = curl_easy_escape(curl, "4000000001232", 0);
        char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count?\"filter\"=%s&view_id=%s&project_id=%s", enc_"filter", enc_view_id, enc_project_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_"filter");
        curl_free(enc_view_id);
        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}";
query["view_id"] = "4000000001232";
query["project_id"] = "23806000097545166";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_view_id = curl_easy_escape(curl, "4000000001232", 0);
        char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count";
        url += "?"filter"=" + std::string(enc_"filter");
        url += "&view_id=" + std::string(enc_view_id);
        url += "&project_id=" + std::string(enc_project_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_"filter");
        curl_free(enc_view_id);
        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-view_id (java.net.URLEncoder/encode "4000000001232" "UTF-8")
      enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count" "?"filter"=" enc-"filter" "&view_id=" enc-view_id "&project_id=" enc-project_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count", nil)
    q := req.URL.Query()
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("view_id", "4000000001232")
    q.Add("project_id", "23806000097545166")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count?%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22name%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22field_name%22%3A%22Risk+Name%22%2C%22offset%22%3A%221%22%2C%22unit%22%3A%22days%22%2C%22prior%22%3A%22before%22%2C%22is_this_today%22%3Afalse%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&view_id=4000000001232&project_id=23806000097545166 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entities/count");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("view_id", "4000000001232");
uriBuilder.addParameter("project_id", "23806000097545166");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count';

const params = new URLSearchParams({
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}',
  'view_id': '4000000001232',
  'project_id': '23806000097545166'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"name","field_name":"Risk Name","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","field_name":"Risk Name","offset":"1","unit":"days","prior":"before","is_this_today":false}]}],"pattern":"1 AND 2"}
view_id = "4000000001232"
project_id = "23806000097545166"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("view_id", "4000000001232")
    urlBuilder.addQueryParameter("project_id", "23806000097545166")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_id = [@"4000000001232" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count?"filter"=%@&view_id=%@&project_id=%@", encoded"filter", encodedView_id, encodedProject_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_view_id = Uri.pct_encode "4000000001232" in
  let enc_project_id = Uri.pct_encode "23806000097545166" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count" ^ "?"filter"=" ^ enc_"filter" ^ "&view_id=" ^ enc_view_id ^ "&project_id=" ^ enc_project_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"name`",`"field_name`":`"Risk Name`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"field_name`":`"Risk Name`",`"offset`":`"1`",`"unit`":`"days`",`"prior`":`"before`",`"is_this_today`":false}]}],`"pattern`":`"1 AND 2`"}"
    view_id = "4000000001232"
    project_id = "23806000097545166"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count"

params <- list(
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}",
  view_id = "4000000001232",
  project_id = "23806000097545166"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entities/count")!
components.queryItems = [
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"name\",\"field_name\":\"Risk Name\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"field_name\":\"Risk Name\",\"offset\":\"1\",\"unit\":\"days\",\"prior\":\"before\",\"is_this_today\":false}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "view_id", value: "4000000001232"),
    URLQueryItem(name: "project_id", value: "23806000097545166")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

"filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "name", "field_name" : "Risk Name", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "field_name" : "Risk Name", "offset" : "1", "unit" : "days", "prior" : "before", "is_this_today" : false } ] } ], "pattern" : "1 AND 2" } view_id : "4000000001232" project_id : "23806000097545166"

Sample Response

200{ "total_count" : 7 }
Record Comments

This module covers operations related to comments within records. Use this API to retrieve, add, update, or delete comments associated with entities in a custom module.

Get All Comments

Retrieve all comments for a record. Use this API to view comments with pagination and sorting support.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/comments

OAuth Scope:

ZohoProjects.custom_fields.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

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

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments?page=%s&per_page=%s&sort_by=%s", enc_page, enc_per_page, enc_sort_by);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments?page=1&per_page=10&sort_by=ASC%28last_modified_time%29 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/comments");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments?page=%@&per_page=%@&sort_by=%@", encodedPage, encodedPer_page, encodedSort_by];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

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

Sample Response

200{ "comments" : [ { "id" : "108250000001866007", "content" : "
first comment
", "created_by" : { "id" : "67336035", "zpuid" : "108250000000051003", "name" : "Ross Davis", "email" : "ross.davis@zylker.com", "is_client_user" : false, "first_name" : "Ross", "last_name" : "Reed", "full_name" : "Ross Davis", "business_hours_id" : "108250000001657017" }, "attachments" : [ { "attachment_id" : "108250000001866029", "name" : "Image 679x679 04-01-2026 20:50:50:900.jpg", "type" : "image/jpeg", "size" : "18236", "third_party_file_id" : "k58sx8a7bc1c8b21945fea00fe125de5f643a", "entity_id" : "108250000001866007", "entity_type" : "custom_module_comment", "app_domain" : "workdrive", "app_id" : "1", "app_name" : "", "created_by" : "67336035", "created_time" : "1767540051974", "associated_by" : "67336035", "associated_by_name" : "Reece Turner", "associated_time_long" : "1767540053894", "preview_url" : "https://previewengine.localzoho.com/thumbnail/WD/k58sx8a7bc1c8b21945fea00fe125de5f643a?x-cli-msg=eyJtb2R1bGUiOiJyaXNrIiwiZW50aXR5X2lkIjoiLTFfMTA4MjUwMDAwMDAxODY2MDA3In0&size=l", "download_url" : "https://download.localzoho.com/v1/workdrive/download/k58sx8a7bc1c8b21945fea00fe125de5f643a?x-cli-msg=%7B%22module%22%3A%22risk%22%2C%22entity_id%22%3A%22-1_108250000001866007%22%7D", "permanent_url" : "https://workdrive.localzoho.com/file/k58sx8a7bc1c8b21945fea00fe125de5f643a?authId=%7B%22module%22%3A%22risk%22%2C%22entity_id%22%3A%22-1_108250000001866007%22%7D", "uploadedZpuid" : "108250000000051003", "parentFolderId" : "la6u1ca30e51816c944c8892d1cb9bd377398", "trashed" : false } ], "created_time" : "2026-01-04T15:10:17.174Z", "updated_time" : "2026-01-04T15:10:17.174Z", "updatedBy" : { "id" : "67336035", "zpuid" : "108250000000051003", "name" : "Marcus", "email" : "marcus.reed@zylker.com", "is_client_user" : false, "first_name" : "Marcus", "last_name" : "Reed", "full_name" : "Marcus Reed", "business_hours_id" : "108250000001657017" }, "deletedTime" : "1969-12-31T23:59:59.999Z", "commentId" : "108250000001866007" }, { "id" : "108250000001866013", "content" : "
second comment
", "created_by" : { "id" : "67336035", "zpuid" : "108250000000051003", "name" : "Marcus", "email" : "marcus.reed@zylker.com", "is_client_user" : false, "first_name" : "Marcus", "last_name" : "Reed", "full_name" : "Marcus Reed", "business_hours_id" : "108250000001657017" }, "attachments" : [ ], "created_time" : "2026-01-04T15:10:22.597Z", "updated_time" : "2026-01-04T15:10:22.597Z", "updatedBy" : { "id" : "67336035", "zpuid" : "108250000000051003", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "reece", "last_name" : "Reed", "full_name" : "Reece Turner", "business_hours_id" : "108250000001657017" }, "deletedTime" : "1969-12-31T23:59:59.999Z", "commentId" : "108250000001866013" } ], "pageInfo" : { "per_page" : "100", "has_next_page" : false, "count" : "2", "page" : "1" } }
Get Comment Detail

Retrieve the details of a specific comment from a record. Use this API to fetch a single comment using its ID.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "id" : "7000000115191", "content" : "
sampel comment 2
", "created_by" : { "id" : "25450833", "zpuid" : "7000000002411", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "attachments" : [ ], "created_time" : "2025-02-26T09:13:04.592Z", "updated_time" : "2025-02-26T09:14:05.464Z", "updatedBy" : { "id" : "25450833", "zpuid" : "7000000002411", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "deletedTime" : "1969-12-31T23:59:59.999Z", "commentId" : "7000000115191" }
Add Comment

Add a comment to a record. Use this API to post a new comment, with optional attachments.

POST

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/comments

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Parameter

Param Name
Data Type
Description
content

String

required
max length : 65535

Enter the comment content.

attachments

JSONArray

max length : 10000

Enter the attachment details to associate or remove.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments";
params = Map();
params.put("content", "Sample content");
params.put("attachments", [{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments');

const payload = JSON.stringify({"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments");
request.Content = new StringContent(
    @"{""content"":""Sample content"",""attachments"":[{""add"":[{""attachment_id"":""40000000987652""}],""remove"":[{""attachment_id"":""40000000987652""}],""attachment_id"":""40000000987652""}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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]/entity/[ENTITYID]/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "Sample content", "attachments" : [ { "add" : [ { "attachment_id" : "40000000987652" } ], "remove" : [ { "attachment_id" : "40000000987652" } ], "attachment_id" : "40000000987652" } ] }

Sample Response

200{ "id" : "7000000115191", "content" : "
sampel comment
", "created_by" : { "id" : "25450833", "zpuid" : "7000000002411", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "attachments" : [ ], "created_time" : "2025-02-26T09:13:04.592Z", "updated_time" : "2025-02-26T09:13:04.592Z", "updatedBy" : { "id" : "25450833", "zpuid" : "7000000002411", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "deletedTime" : "1969-12-31T23:59:59.999Z", "commentId" : "7000000115191" }
Update Record Comment

Modify details of an existing comment in a record. Use this API to modify comment content or associated attachments.

PATCH

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.custom_fields.UPDATE

Parameter

Param Name
Data Type
Description
content

String

required
max length : 65535

Enter the comment.

attachments

JSONArray

max length : 10000

Enter the attachment details.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046";
params = Map();
params.put("content", "Sample content");
params.put("attachments", [{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046');

const payload = JSON.stringify({"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""content"":""Sample content"",""attachments"":[{""add"":[{""attachment_id"":""40000000987652""}],""remove"":[{""attachment_id"":""40000000987652""}],""attachment_id"":""40000000987652""}]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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]/entity/[ENTITYID]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Sample content\",\"attachments\":[{\"add\":[{\"attachment_id\":\"40000000987652\"}],\"remove\":[{\"attachment_id\":\"40000000987652\"}],\"attachment_id\":\"40000000987652\"}]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Sample content","attachments":[{"add":[{"attachment_id":"40000000987652"}],"remove":[{"attachment_id":"40000000987652"}],"attachment_id":"40000000987652"}]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "Sample content", "attachments" : [ { "add" : [ { "attachment_id" : "40000000987652" } ], "remove" : [ { "attachment_id" : "40000000987652" } ], "attachment_id" : "40000000987652" } ] }

Sample Response

200{ "id" : "7000000115191", "content" : "
sampel comment 2
", "created_by" : { "id" : "25450833", "zpuid" : "7000000002411", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "attachments" : [ ], "created_time" : "2025-02-26T09:13:04.592Z", "updated_time" : "2025-02-26T09:14:05.464Z", "updatedBy" : { "id" : "25450833", "zpuid" : "7000000002411", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Reed", "full_name" : "Reece Turner" }, "deletedTime" : "1969-12-31T23:59:59.999Z", "commentId" : "7000000115191" }
Delete Record Comment

Remove a comment from a record. Use this API to remove a comment permanently.

DELETE

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/comments/[COMMENTID]

OAuth Scope:

ZohoProjects.custom_fields.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Get Comments Count

Retrieve the total number of comments for a record.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/commentscount

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/commentscount");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/commentscount")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "comments_count" : "6" }
Record Attachments

This module covers operations related to attachments within a record. Use this API to add or delete attachments from an entity.

Get Attachments

Retrieve all attachments associated with a record.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/attachments

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
project_id

long

Enter the project ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments?project_id=23806000097545166' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments";
params = Map();
params.put("project_id", "23806000097545166");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments');
url.searchParams.append('project_id', '23806000097545166');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments")
params = {
  "project_id" => "23806000097545166"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'project_id' => '23806000097545166',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments"

params = {
    "project_id": "23806000097545166"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments?project_id=%s", enc_project_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["project_id"] = "23806000097545166";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments";
        url += "?project_id=" + std::string(enc_project_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments" "?project_id=" enc-project_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments", nil)
    q := req.URL.Query()
    q.Add("project_id", "23806000097545166")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments?project_id=23806000097545166 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/attachments");
uriBuilder.addParameter("project_id", "23806000097545166");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments';

const params = new URLSearchParams({
  'project_id': '23806000097545166'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
project_id = "23806000097545166"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("project_id", "23806000097545166")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments?project_id=%@", encodedProject_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_project_id = Uri.pct_encode "23806000097545166" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments" ^ "?project_id=" ^ enc_project_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    project_id = "23806000097545166"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments"

params <- list(
  project_id = "23806000097545166"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachments")!
components.queryItems = [
    URLQueryItem(name: "project_id", value: "23806000097545166")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

project_id : "23806000097545166"

Sample Response

200{ "comment_attachments" : [ { "created_time" : "1767540051974", "associated_time_long" : "1767540053894", "third_party_file_id" : "k58sx8a7bc1c8b21945fea00fe125de5f643a", "parentFolderId" : "la6u1ca30e51816c944c8892d1cb9bd377398", "app_domain" : "workdrive", "type" : "image/jpeg", "entity_id" : "108250000001866007", "created_by" : "67336035", "uploadedZpuid" : "108250000000051003", "app_name" : "", "permanent_url" : "https://workdrive.localzoho.com/file/k58sx8a7bc1c8b21945fea00fe125de5f643a?authId=%7B%22module%22%3A%22risk%22%2C%22entity_id%22%3A%220_108250000001866007%22%7D", "entity_type" : "custom_module_comment", "size" : "18236", "associated_by" : "67336035", "preview_url" : "https://previewengine.localzoho.com/thumbnail/WD/k58sx8a7bc1c8b21945fea00fe125de5f643a?x-cli-msg=eyJtb2R1bGUiOiJyaXNrIiwiZW50aXR5X2lkIjoiMF8xMDgyNTAwMDAwMDE4NjYwMDcifQ&size=l", "attachment_id" : "108250000001866029", "name" : "Image 679x679 04-01-2026 20:50:50:900.jpg", "associated_by_name" : "Reece Turner", "download_url" : "https://download.localzoho.com/v1/workdrive/download/k58sx8a7bc1c8b21945fea00fe125de5f643a?x-cli-msg=%7B%22module%22%3A%22risk%22%2C%22entity_id%22%3A%220_108250000001866007%22%7D", "app_id" : "1", "trashed" : false } ], "total_attachments_count" : 2, "third_party_attachments" : [ { "created_time" : "1767539456391", "associated_time_long" : "1767539456767", "third_party_file_id" : "k58sx61bc5a2f6446435bb30239a60aa3102f", "parentFolderId" : "la6u1ca30e51816c944c8892d1cb9bd377398", "app_domain" : "workdrive", "type" : "image/jpeg", "entity_id" : "108250000001866001", "created_by" : "67336035", "uploadedZpuid" : "108250000000051003", "app_name" : "", "permanent_url" : "https://workdrive.localzoho.com/file/k58sx61bc5a2f6446435bb30239a60aa3102f?authId=%7B%22module%22%3A%22risk%22%2C%22entity_id%22%3A%220_108250000001866001%22%7D", "entity_type" : "custom_module", "size" : "18236", "associated_by" : "67336035", "preview_url" : "https://previewengine.localzoho.com/thumbnail/WD/k58sx61bc5a2f6446435bb30239a60aa3102f?x-cli-msg=eyJtb2R1bGUiOiJyaXNrIiwiZW50aXR5X2lkIjoiMF8xMDgyNTAwMDAwMDE4NjYwMDEifQ&size=l", "attachment_id" : "108250000001866023", "name" : "Image 679x679.jpg", "associated_by_name" : "Reece Turner", "download_url" : "https://download.localzoho.com/v1/workdrive/download/k58sx61bc5a2f6446435bb30239a60aa3102f?x-cli-msg=%7B%22module%22%3A%22risk%22%2C%22entity_id%22%3A%220_108250000001866001%22%7D", "app_id" : "1", "trashed" : false } ] }
Get Attachments Count

Retrieve the total number of attachments for a record.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/attachmentcount

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/attachmentcount");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/attachmentcount")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "attachment_count" : "6" }
Record Followers

This module covers operations related to followers within a record. Use this API to retrieve, add, or remove followers from a record.

Get Followers

Retrieve the list of followers from the record.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/followers

OAuth Scope:

ZohoProjects.custom_fields.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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/followers");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

200{ "followers" : [ { "follower" : { "id" : "67366354", "zpuid" : "108250000000054021", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Turner", "full_name" : "Reece Turner", "business_hours_id" : "108250000001657017" }, "type" : "explicit" }, { "follower" : { "id" : "80056343", "zpuid" : "108250000000909232", "name" : "Reece Turner", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece Turner", "last_name" : "Reed", "full_name" : "Reece Turner", "business_hours_id" : "108250000001657017" }, "type" : "explicit" }, { "follower" : { "id" : "89614702", "zpuid" : "108250000001485169", "name" : "Reece", "email" : "reece.turner@zylker.com", "is_client_user" : false, "first_name" : "Reece", "last_name" : "Turner", "full_name" : "Reece Turner", "business_hours_id" : "108250000001657017" }, "type" : "explicit" } ], "pageInfo" : { "per_page" : "100", "has_next_page" : false, "count" : "3", "page" : "1" } }
Add Follower

Add a follower to the record.

POST

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/follow

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/follow");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/follow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Add or Remove Followers

Add or remove multiple followers for a record. Use this API to manage followers in bulk..

POST

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/followers

OAuth Scope:

ZohoProjects.custom_fields.CREATE

Parameter

Param Name
Data Type
Description

JSONArray

max length : 10000

Specify the follower details to add.

JSONArray

max length : 10000

Specify the follower details to remove.

zpuid

String

max length : 30

Enter the ZPUID of the user to update.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers";
params = List();
params.add({"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"});
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers');

const payload = JSON.stringify([{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]);

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\"}]");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers");
request.Content = new StringContent(
    @"[{""add"":[{""zpuid"":""4000000002055""}],""remove"":[{""zpuid"":""4000000002055""}],""zpuid"":""4000000002055""}]",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\"}]");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\"}]"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\"}]")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"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/module/[MODULEID]/entity/[ENTITYID]/followers");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\"}]";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify([{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}])
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\"}]" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "[{\"add\":[{\"zpuid\":\"4000000002055\"}],\"remove\":[{\"zpuid\":\"4000000002055\"}],\"zpuid\":\"4000000002055\"}]"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/followers")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
[{"add":[{"zpuid":"4000000002055"}],"remove":[{"zpuid":"4000000002055"}],"zpuid":"4000000002055"}]
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
[ { "add" : [ { "zpuid" : "4000000002055" } ], "remove" : [ { "zpuid" : "4000000002055" } ], "zpuid" : "4000000002055" } ]

Sample Response

200[ { "follower" : { "id" : "15852557", "zpuid" : "7000000024005", "name" : "Henry", "email" : "daniel.cooper@zylker.com", "is_client_user" : false, "first_name" : "Henry", "last_name" : "Reed", "full_name" : "Henry R", "business_hours_id" : "7000000197013" }, "type" : "explicit" } ]
Remove Follower

Remove a follower from the record.

DELETE

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/unfollow

OAuth Scope:

ZohoProjects.custom_fields.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/unfollow");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/unfollow")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Check Follower

Verify whether the current user is a follower of the record.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/isuser

OAuth Scope:

ZohoProjects.custom_fields.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/isuser");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/isuser")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "is_user" : false }
Record Custom View

This module covers operations related to custom view of records. Use this API to retrieve, add, or remove custom view of the records.

Get Custom View Detail

Get detail of the custom view.

GET

/api/v3/portal/[PORTALID]/views/[VIEWID]

OAuth Scope:

ZohoProjects.custom_fields.READ

Query Parameter

Param Name
Data Type
Description
module

String

required

Enter the module API name or ID.

project_id

long

Enter the project ID.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]?module=projects&project_id=23806000097545166' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]";
params = Map();
params.put("module", "projects");
params.put("project_id", "23806000097545166");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]');
url.searchParams.append('module', 'projects');
url.searchParams.append('project_id', '23806000097545166');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]")
params = {
  "module" => "projects",
  "project_id" => "23806000097545166"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'module' => 'projects',
    'project_id' => '23806000097545166',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]"

params = {
    "module": "projects",
    "project_id": "23806000097545166"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_module = curl_easy_escape(curl, "projects", 0);
        char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]?module=%s&project_id=%s", enc_module, enc_project_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_module);
        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["module"] = "projects";
query["project_id"] = "23806000097545166";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_module = curl_easy_escape(curl, "projects", 0);
        char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]";
        url += "?module=" + std::string(enc_module);
        url += "&project_id=" + std::string(enc_project_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_module);
        curl_free(enc_project_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-module (java.net.URLEncoder/encode "projects" "UTF-8")
      enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]" "?module=" enc-module "&project_id=" enc-project_id)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]", nil)
    q := req.URL.Query()
    q.Add("module", "projects")
    q.Add("project_id", "23806000097545166")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]?module=projects&project_id=23806000097545166 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/views/[VIEWID]");
uriBuilder.addParameter("module", "projects");
uriBuilder.addParameter("project_id", "23806000097545166");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]';

const params = new URLSearchParams({
  'module': 'projects',
  'project_id': '23806000097545166'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
module = "projects"
project_id = "23806000097545166"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("module", "projects")
    urlBuilder.addQueryParameter("project_id", "23806000097545166")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedModule = [@"projects" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]?module=%@&project_id=%@", encodedModule, encodedProject_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_module = Uri.pct_encode "projects" in
  let enc_project_id = Uri.pct_encode "23806000097545166" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]" ^ "?module=" ^ enc_module ^ "&project_id=" ^ enc_project_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    module = "projects"
    project_id = "23806000097545166"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]"

params <- list(
  module = "projects",
  project_id = "23806000097545166"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/views/[VIEWID]")!
components.queryItems = [
    URLQueryItem(name: "module", value: "projects"),
    URLQueryItem(name: "project_id", value: "23806000097545166")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

module : "projects" project_id : "23806000097545166"

Sample Response

200{ "id" : "7000000311032", "name" : "Sec_test_25Nov_1533", "description" : "sample description", "view_access_type" : "shared", "project_access_type" : "all_projects", "is_view_specific_columns" : true, "is_default_view" : false, "is_globally_accessible" : true, "determiner" : { "pattern" : "1 AND 2", "criteria" : [ { "field_name" : "name", "condition" : "is", "value" : [ "name" ] } ] }, "fields" : [ { "id" : "7000000309491", "field_name" : "layout", "display_name" : "Layout", "column_name" : "LAYOUT_ID", "field_type" : "picklist", "is_default" : true, "field_property" : { "field_type_properties" : { "max_options_allowed" : 500, "max_options_select" : 1, "options_type" : "default" }, "is_pii" : false, "is_encrypted" : false, "metadata_property" : { "is_property_mutable" : true, "is_removable" : true, "is_mandate_enabled" : true, "has_field_level_permission" : true }, "scope" : "global_scope" }, "is_deactivated" : false } ], "shared_users" : [ { "zuid" : 15853163, "zpuid" : "7000000024011", "name" : "Spade", "email" : "rijo.rt+526@zohotest.com", "first_name" : "Spade", "last_name" : "R", "full_name" : "Spade R" } ], "shared_projects" : [ { "id" : "7000000373246", "key" : "192", "name" : "SourceP", "project_type" : "ACTIVE", "business_hours_id" : "7000000197013" } ], "created_time" : "2025-11-25T10:10:06.794Z", "created_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Raj571", "email" : "rijo.rt@zohotest.com", "first_name" : "Raj571", "last_name" : "R", "full_name" : "Raj571 R" }, "updated_time" : "2025-11-25T10:17:59.397Z", "updated_by" : { "zuid" : 25450833, "zpuid" : "7000000002411", "name" : "Raj571", "email" : "rijo.rt@zohotest.com", "first_name" : "Raj571", "last_name" : "R", "full_name" : "Raj571 R" } }
Record Audit

This module covers operations related to audit within records. Use this API to retrieve audit details of a record.

Get All Edits of a Record

Retrieve all changes made to a record. Use this API to view the edit history of the record.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/edits

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description
index

int

Enter the index of the record.

range

int

Enter the range of the record.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits?index=1&range=100&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits";
params = Map();
params.put("index", "1");
params.put("range", "100");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits');
url.searchParams.append('index', '1');
url.searchParams.append('range', '100');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits")
params = {
  "index" => "1",
  "range" => "100",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'index' => '1',
    'range' => '100',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits"

params = {
    "index": "1",
    "range": "100",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_index = curl_easy_escape(curl, "1", 0);
        char *enc_range = curl_easy_escape(curl, "100", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits?index=%s&range=%s&page=%s&per_page=%s", enc_index, enc_range, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_index);
        curl_free(enc_range);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["index"] = "1";
query["range"] = "100";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_index = curl_easy_escape(curl, "1", 0);
        char* enc_range = curl_easy_escape(curl, "100", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits";
        url += "?index=" + std::string(enc_index);
        url += "&range=" + std::string(enc_range);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_index);
        curl_free(enc_range);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-index (java.net.URLEncoder/encode "1" "UTF-8")
      enc-range (java.net.URLEncoder/encode "100" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits" "?index=" enc-index "&range=" enc-range "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits", nil)
    q := req.URL.Query()
    q.Add("index", "1")
    q.Add("range", "100")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits?index=1&range=100&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/edits");
uriBuilder.addParameter("index", "1");
uriBuilder.addParameter("range", "100");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits';

const params = new URLSearchParams({
  'index': '1',
  'range': '100',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
index = "1"
range = "100"
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("index", "1")
    urlBuilder.addQueryParameter("range", "100")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedIndex = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedRange = [@"100" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits?index=%@&range=%@&page=%@&per_page=%@", encodedIndex, encodedRange, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_index = Uri.pct_encode "1" in
  let enc_range = Uri.pct_encode "100" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits" ^ "?index=" ^ enc_index ^ "&range=" ^ enc_range ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    index = "1"
    range = "100"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits"

params <- list(
  index = "1",
  range = "100",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits")!
components.queryItems = [
    URLQueryItem(name: "index", value: "1"),
    URLQueryItem(name: "range", value: "100"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

index : "1" range : "100" page : "1" per_page : "10"

Sample Response

200{ "activities" : [ { "action_time" : "2026-01-04T09:21:01.000Z", "activity" : "entity", "extra_data" : "", "edits" : [ { "old_value" : "qdwqdq", "field_type" : "singleline", "new_value" : "attachments sample", "field_name" : "section Name" } ], "name" : "attachments sample", "id" : "7000000328007", "entity_id" : "7000000279011", "user" : { "name" : "Daniel Cooper", "id" : 25450833 }, "activity_state" : "update" } ] }
Get Edits by Audit ID

Retrieve details of a specific edit using the audit ID.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/edits/[EDITID]");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/[EDITID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "activities" : [ { "action_time" : "2026-01-04T09:21:01.000Z", "activity" : "entity", "extra_data" : "", "edits" : [ { "old_value" : "qdwqdq", "field_type" : "singleline", "new_value" : "attachments sample", "field_name" : "section Name" } ], "name" : "attachments sample", "id" : "7000000328007", "entity_id" : "7000000279011", "user" : { "name" : "Daniel Cooper", "id" : 25450833 }, "activity_state" : "update" } ] }
Get Edit Count

Retrieve the total number of edits made to a record within a module.

GET

/api/v3/portal/[PORTALID]/module/[MODULEID]/entity/[ENTITYID]/edits/count

OAuth Scope:

ZohoProjects.portals.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/entity/[ENTITYID]/edits/count");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/module/[MODULEID]/entity/[ENTITYID]/edits/count")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "count" : 4 }
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 Project Forums

Retrieve all forums in a specific project. Use this API to access the list of forums available within 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 for the forums. Accepted values: created_time, updated_time, last_activity

sort_order

String

Enter the sort order for the forums. Accepted values: asc, desc

page

int

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria to narrow down the forum results.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%221%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22software%22%5D%7D%2C%7B%22cfid%22%3A%223%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%228000000002411%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums";
params = Map();
params.put("sort_by", "created_time");
params.put("sort_order", "desc");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"1","criteria_condition":"contains","value":["software"]},{"cfid":"3","criteria_condition":"is","value":["8000000002411"]}],"pattern":"1 AND 2"});
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums');
url.searchParams.append('sort_by', 'created_time');
url.searchParams.append('sort_order', 'desc');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('filter', '{"criteria":[{"cfid":"1","criteria_condition":"contains","value":["software"]},{"cfid":"3","criteria_condition":"is","value":["8000000002411"]}],"pattern":"1 AND 2"}');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums")
params = {
  "sort_by" => "created_time",
  "sort_order" => "desc",
  "page" => "1",
  "per_page" => "10",
  "filter" => "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'sort_by' => 'created_time',
    'sort_order' => 'desc',
    'page' => '1',
    'per_page' => '10',
    'filter' => '{"criteria":[{"cfid":"1","criteria_condition":"contains","value":["software"]},{"cfid":"3","criteria_condition":"is","value":["8000000002411"]}],"pattern":"1 AND 2"}',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums"

params = {
    "sort_by": "created_time",
    "sort_order": "desc",
    "page": "1",
    "per_page": "10",
    "filter": "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_sort_by = curl_easy_escape(curl, "created_time", 0);
        char *enc_sort_order = curl_easy_escape(curl, "desc", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums?sort_by=%s&sort_order=%s&page=%s&per_page=%s&filter=%s", enc_sort_by, enc_sort_order, enc_page, enc_per_page, enc_filter);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_sort_by);
        curl_free(enc_sort_order);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_filter);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["sort_by"] = "created_time";
query["sort_order"] = "desc";
query["page"] = "1";
query["per_page"] = "10";
query["filter"] = "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_sort_by = curl_easy_escape(curl, "created_time", 0);
        char* enc_sort_order = curl_easy_escape(curl, "desc", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums";
        url += "?sort_by=" + std::string(enc_sort_by);
        url += "&sort_order=" + std::string(enc_sort_order);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&filter=" + std::string(enc_filter);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_sort_by);
        curl_free(enc_sort_order);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_filter);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-sort_by (java.net.URLEncoder/encode "created_time" "UTF-8")
      enc-sort_order (java.net.URLEncoder/encode "desc" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-filter (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums" "?sort_by=" enc-sort_by "&sort_order=" enc-sort_order "&page=" enc-page "&per_page=" enc-per_page "&filter=" enc-filter)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums", nil)
    q := req.URL.Query()
    q.Add("sort_by", "created_time")
    q.Add("sort_order", "desc")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("filter", "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
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=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%221%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22software%22%5D%7D%2C%7B%22cfid%22%3A%223%22%2C%22criteria_condition%22%3A%22is%22%2C%22value%22%3A%5B%228000000002411%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("sort_by", "created_time");
uriBuilder.addParameter("sort_order", "desc");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("filter", "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums';

const params = new URLSearchParams({
  'sort_by': 'created_time',
  'sort_order': 'desc',
  'page': '1',
  'per_page': '10',
  'filter': '{"criteria":[{"cfid":"1","criteria_condition":"contains","value":["software"]},{"cfid":"3","criteria_condition":"is","value":["8000000002411"]}],"pattern":"1 AND 2"}'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
sort_by = "created_time"
sort_order = "desc"
page = "1"
per_page = "10"
filter = {"criteria":[{"cfid":"1","criteria_condition":"contains","value":["software"]},{"cfid":"3","criteria_condition":"is","value":["8000000002411"]}],"pattern":"1 AND 2"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("sort_by", "created_time")
    urlBuilder.addQueryParameter("sort_order", "desc")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("filter", "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedSort_by = [@"created_time" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_order = [@"desc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedFilter = [@"{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums?sort_by=%@&sort_order=%@&page=%@&per_page=%@&filter=%@", encodedSort_by, encodedSort_order, encodedPage, encodedPer_page, encodedFilter];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_sort_by = Uri.pct_encode "created_time" in
  let enc_sort_order = Uri.pct_encode "desc" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_filter = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums" ^ "?sort_by=" ^ enc_sort_by ^ "&sort_order=" ^ enc_sort_order ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&filter=" ^ enc_filter) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    sort_by = "created_time"
    sort_order = "desc"
    page = "1"
    per_page = "10"
    filter = "{`"criteria`":[{`"cfid`":`"1`",`"criteria_condition`":`"contains`",`"value`":[`"software`"]},{`"cfid`":`"3`",`"criteria_condition`":`"is`",`"value`":[`"8000000002411`"]}],`"pattern`":`"1 AND 2`"}"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums"

params <- list(
  sort_by = "created_time",
  sort_order = "desc",
  page = "1",
  per_page = "10",
  filter = "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums")!
components.queryItems = [
    URLQueryItem(name: "sort_by", value: "created_time"),
    URLQueryItem(name: "sort_order", value: "desc"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "filter", value: "{\"criteria\":[{\"cfid\":\"1\",\"criteria_condition\":\"contains\",\"value\":[\"software\"]},{\"cfid\":\"3\",\"criteria_condition\":\"is\",\"value\":[\"8000000002411\"]}],\"pattern\":\"1 AND 2\"}")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

sort_by : "created_time" sort_order : "desc" page : "1" per_page : "10" filter : {"criteria":[{"cfid":"1","criteria_condition":"contains","value":["software"]},{"cfid":"3","criteria_condition":"is","value":["8000000002411"]}],"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@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "id" : "1752587000000094001", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ], "page_info" : { "per_page" : 10, "has_next_page" : false, "count" : 2, "page" : 1 } }
Get Forum Details

Retrieve the details of a specific forum in a project. Use this API to access the full information of a forum within a project.

GET

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

OAuth Scope:

ZohoProjects.forums.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "forums" : [ { "comment_count" : 0, "created_time" : "2021-09-03T13:10:02.034Z", "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" : "patricia.boyle@zylker.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", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-03T13:10:02.033Z", "mail_to" : "yLFo4w868675N6700kx6700kKM0872878F@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "id" : "1752587000000095015", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ] }
Get Associated Tasks

Retrieve all tasks associated with a specific forum in a project. Use this API to access the list of tasks linked to 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

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/tasks")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.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" : "#08aeea" } } ] }
Add Forum

Add a new forum to a specific project. Use this API to create a forum for discussions within 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 title of the forum.

content

String

required

Enter the content of the forum.

category_id

long

required

Enter the ID of the project category to associate with the forum. Use the Get Categories API to retrieve the category ID.

tags

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the tags to associate with the forum.

flag

String

Specify the visibility of the forum. Accepted values: internal (visible only to project users), external (visible to both project and client users)

type

String

Enter the type of the forum. Accepted values: normal, question

is_sticky

String

Specify whether to pin the forum post to the top. Accepted values: true, false

is_announcement

String

Specify whether to mark the forum post as an announcement. Accepted values: true, false

notify

JSONArray

max length : 7000
array size : 0-100

Enter the ZPUIDs of the users to notify about the forum.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to associate with the forum.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums";
params = Map();
params.put("title", "Software Development Project Discussion");
params.put("content", "Please review the updated project scope and share your feedback by end of day.");
params.put("category_id", 8000000041081);
params.put("tags", [8000000041135]);
params.put("flag", "internal");
params.put("type", "normal");
params.put("is_sticky", true);
params.put("is_announcement", false);
params.put("notify", "true");
params.put("attachment_ids", [8000000094011]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums');

const payload = JSON.stringify({"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums");
request.Content = new StringContent(
    @"{""title"":""Software Development Project Discussion"",""content"":""Please review the updated project scope and share your feedback by end of day."",""category_id"":8000000041081,""tags"":[8000000041135],""flag"":""internal"",""type"":""normal"",""is_sticky"":true,""is_announcement"":false,""notify"":""true"",""attachment_ids"":[8000000094011]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[8000000094011]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[8000000094011]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[8000000094011]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[8000000094011]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"notify\":\"true\",\"attachment_ids\":[8000000094011]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"notify":"true","attachment_ids":[8000000094011]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "title" : "Software Development Project Discussion", "content" : "Please review the updated project scope and share your feedback by end of day.", "category_id" : 8000000041081, "tags" : [ 8000000041135 ], "flag" : "internal", "type" : "normal", "is_sticky" : true, "is_announcement" : false, "notify" : "true", "attachment_ids" : [ 8000000094011 ] }

Sample Response

200{ "forums" : [ { "comment_count" : 0, "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" : "patricia.boyle@zylker.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", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-03T12:56:42.324Z", "mail_to" : "yLFo4wk0x75tx6700kx6700rM0870pKl@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "id" : "1752587000000095001", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ] }
Update Forum

Update a forum in a specific project. Use this API to modify the details of an existing forum within 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 updated title of the forum.

content

String

Enter the updated content of the forum.

category_id

long

Enter the ID of the project category to associate with the forum. Use the Get All Forum Categories API to retrieve the category ID.

tags

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the tags to associate with the forum.

flag

String

Specify the visibility of the forum. Accepted values: internal (visible only to project users), external (visible to both project and client users)

type

String

Enter the type of the forum. Accepted values: normal, question

is_sticky

String

Specify whether to pin the forum post to the top. Accepted values: true, false

is_announcement

String

Specify whether to mark the forum post as an announcement. Accepted values: true, false

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to associate with the forum.

delete_attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to remove from the forum.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035";
params = Map();
params.put("title", "Software Development Project Discussion");
params.put("content", "Please review the updated project scope and share your feedback by end of day.");
params.put("category_id", 8000000041081);
params.put("tags", [8000000041135]);
params.put("flag", "internal");
params.put("type", "normal");
params.put("is_sticky", true);
params.put("is_announcement", false);
params.put("attachment_ids", [8000000094011]);
params.put("delete_attachment_ids", [8000000094011]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035');

const payload = JSON.stringify({"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");
request.Content = new StringContent(
    @"{""title"":""Software Development Project Discussion"",""content"":""Please review the updated project scope and share your feedback by end of day."",""category_id"":8000000041081,""tags"":[8000000041135],""flag"":""internal"",""type"":""normal"",""is_sticky"":true,""is_announcement"":false,""attachment_ids"":[8000000094011],""delete_attachment_ids"":[8000000094011]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"title\":\"Software Development Project Discussion\",\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"category_id\":8000000041081,\"tags\":[8000000041135],\"flag\":\"internal\",\"type\":\"normal\",\"is_sticky\":true,\"is_announcement\":false,\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"title":"Software Development Project Discussion","content":"Please review the updated project scope and share your feedback by end of day.","category_id":8000000041081,"tags":[8000000041135],"flag":"internal","type":"normal","is_sticky":true,"is_announcement":false,"attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "title" : "Software Development Project Discussion", "content" : "Please review the updated project scope and share your feedback by end of day.", "category_id" : 8000000041081, "tags" : [ 8000000041135 ], "flag" : "internal", "type" : "normal", "is_sticky" : true, "is_announcement" : false, "attachment_ids" : [ 8000000094011 ], "delete_attachment_ids" : [ 8000000094011 ] }

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" : "patricia.boyle@zylker.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", "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@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "id" : "1752587000000095001", "category" : { "name" : "Gym Management", "id" : "1752587000000041081" } } ] }
Delete Forum

Delete a forum from a specific project. Use this API to permanently remove a forum and its content from a project.

DELETE

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

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 all comments from a specific forum in a project. Use this API to access the list of comments posted within 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 for the comments. Accepted values: created_time, updated_time

sort_order

String

Enter the sort order for the comments. Accepted values: asc, desc

page

int

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments?sort_by=created_time&sort_order=desc&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments";
params = Map();
params.put("sort_by", "created_time");
params.put("sort_order", "desc");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments');
url.searchParams.append('sort_by', 'created_time');
url.searchParams.append('sort_order', 'desc');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments")
params = {
  "sort_by" => "created_time",
  "sort_order" => "desc",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'sort_by' => 'created_time',
    'sort_order' => 'desc',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments"

params = {
    "sort_by": "created_time",
    "sort_order": "desc",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_sort_by = curl_easy_escape(curl, "created_time", 0);
        char *enc_sort_order = curl_easy_escape(curl, "desc", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments?sort_by=%s&sort_order=%s&page=%s&per_page=%s", enc_sort_by, enc_sort_order, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_sort_by);
        curl_free(enc_sort_order);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["sort_by"] = "created_time";
query["sort_order"] = "desc";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_sort_by = curl_easy_escape(curl, "created_time", 0);
        char* enc_sort_order = curl_easy_escape(curl, "desc", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments";
        url += "?sort_by=" + std::string(enc_sort_by);
        url += "&sort_order=" + std::string(enc_sort_order);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_sort_by);
        curl_free(enc_sort_order);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-sort_by (java.net.URLEncoder/encode "created_time" "UTF-8")
      enc-sort_order (java.net.URLEncoder/encode "desc" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments" "?sort_by=" enc-sort_by "&sort_order=" enc-sort_order "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments", nil)
    q := req.URL.Query()
    q.Add("sort_by", "created_time")
    q.Add("sort_order", "desc")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments?sort_by=created_time&sort_order=desc&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments");
uriBuilder.addParameter("sort_by", "created_time");
uriBuilder.addParameter("sort_order", "desc");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments';

const params = new URLSearchParams({
  'sort_by': 'created_time',
  'sort_order': 'desc',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
sort_by = "created_time"
sort_order = "desc"
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("sort_by", "created_time")
    urlBuilder.addQueryParameter("sort_order", "desc")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedSort_by = [@"created_time" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_order = [@"desc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments?sort_by=%@&sort_order=%@&page=%@&per_page=%@", encodedSort_by, encodedSort_order, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_sort_by = Uri.pct_encode "created_time" in
  let enc_sort_order = Uri.pct_encode "desc" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments" ^ "?sort_by=" ^ enc_sort_by ^ "&sort_order=" ^ enc_sort_order ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    sort_by = "created_time"
    sort_order = "desc"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments"

params <- list(
  sort_by = "created_time",
  sort_order = "desc",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments")!
components.queryItems = [
    URLQueryItem(name: "sort_by", value: "created_time"),
    URLQueryItem(name: "sort_order", value: "desc"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : [ { "created_time" : "1630645458444", "associated_time_long" : "1630645555361", "third_party_file_id" : "6157663000000038001", "app_domain" : "zfsGlobal", "type" : "image/png", "entity_id" : "1752587000000095001", "created_by" : "patricia.boyle@zylker.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", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-06T13:01:11.774Z", "level" : "1", "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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 in a project. Use this API to access the details of a particular comment within a forum.

GET

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

OAuth Scope:

ZohoProjects.forums.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "forum_comments" : [ { "created_time" : "2021-09-06T13:01:11.775Z", "is_best_answer" : false, "attachments" : [ { "created_time" : "1630645458444", "associated_time_long" : "1630645555361", "third_party_file_id" : "6157663000000038001", "app_domain" : "zfsGlobal", "type" : "image/png", "entity_id" : "1752587000000095001", "created_by" : "patricia.boyle@zylker.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", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-06T13:01:11.774Z", "level" : "1", "status_info" : "0", "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.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!

-Patricia
", "forum_id" : "1752587000000095015", "added_via" : "web", "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "id" : "1752587000000097003" } ] }
Get a Comment by ID

Retrieve the details of a specific forum comment using its comment ID. Use this API to access a forum comment without requiring the forum ID.

GET

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

OAuth Scope:

ZohoProjects.forums.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forumcomments/1752587000000097013")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "forum_comments" : [ { "created_time" : "2021-09-06T16:08:56.069Z", "is_best_answer" : false, "attachments" : [ { "created_time" : "1630645458444", "associated_time_long" : "1630645555361", "third_party_file_id" : "6157663000000038001", "app_domain" : "zfsGlobal", "type" : "image/png", "entity_id" : "1752587000000095001", "created_by" : "patricia.boyle@zylker.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", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-06T16:08:56.068Z", "level" : "1", "status_info" : "0", "last_modified_by" : { "zpuid" : "1752587000000097013", "name" : "Riley Grant", "last_name" : "Grant", "id" : "759539796", "is_client_user" : false, "first_name" : "Riley", "email" : "monica.hemsworth@zylker.com" }, "type" : "answer", "content" : "Sample content", "forum_id" : "1752587000000095015", "added_via" : "web", "posted_by" : { "zpuid" : "1752587000000097013", "name" : "Riley Grant", "last_name" : "Grant", "id" : "759539796", "is_client_user" : false, "first_name" : "Riley", "email" : "monica.hemsworth@zylker.com" }, "id" : "1752587000000099003" } ] }
Add Comment

Add a comment to a specific forum in a project. Use this API to post a comment on a forum within a project.

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 content of the comment.

type

String

Enter the type of the comment. Accepted values: question, answer, normal

notify

JSONArray

max length : 7000
array size : 0-100

Enter the ZPUIDs of the users to notify about the comment.

root_id

long

Enter the ID of the root comment to post a nested reply.

parent_id

long

Enter the ID of the parent comment to post a direct reply.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to associate with the comment.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments";
params = Map();
params.put("content", "Please review the updated project scope and share your feedback by end of day.");
params.put("type", "normal");
params.put("notify", "true");
params.put("root_id", "8000000097003");
params.put("parent_id", "8000000096019");
params.put("attachment_ids", [8000000094011]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments');

const payload = JSON.stringify({"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"8000000097003\",\"parent_id\":\"8000000096019\",\"attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments");
request.Content = new StringContent(
    @"{""content"":""Please review the updated project scope and share your feedback by end of day."",""type"":""normal"",""notify"":""true"",""root_id"":""8000000097003"",""parent_id"":""8000000096019"",""attachment_ids"":[8000000094011]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"8000000097003\",\"parent_id\":\"8000000096019\",\"attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"8000000097003\",\"parent_id\":\"8000000096019\",\"attachment_ids\":[8000000094011]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"8000000097003\",\"parent_id\":\"8000000096019\",\"attachment_ids\":[8000000094011]}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"8000000097003\",\"parent_id\":\"8000000096019\",\"attachment_ids\":[8000000094011]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"8000000097003\",\"parent_id\":\"8000000096019\",\"attachment_ids\":[8000000094011]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"type\":\"normal\",\"notify\":\"true\",\"root_id\":\"8000000097003\",\"parent_id\":\"8000000096019\",\"attachment_ids\":[8000000094011]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Please review the updated project scope and share your feedback by end of day.","type":"normal","notify":"true","root_id":"8000000097003","parent_id":"8000000096019","attachment_ids":[8000000094011]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "Please review the updated project scope and share your feedback by end of day.", "type" : "normal", "notify" : "true", "root_id" : "8000000097003", "parent_id" : "8000000096019", "attachment_ids" : [ 8000000094011 ] }

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" : "patricia.boyle@zylker.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", "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" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "type" : "normal", "content" : "Sample content", "forum_id" : "1752587000000095015", "parent_posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "added_via" : "web", "parent_id" : "1752587000000097003", "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "root_id" : "1752587000000097003", "id" : "1752587000000096009" } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Update Comment

Update a comment in a specific forum in a project. Use this API to modify the content of an existing comment within 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 updated content of the comment.

attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to associate with the comment.

delete_attachment_ids

JSONArray

max length : 7000
array size : 0-100

Enter the IDs of the attachments to remove from the comment.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046";
params = Map();
params.put("content", "Please review the updated project scope and share your feedback by end of day.");
params.put("attachment_ids", [8000000094011]);
params.put("delete_attachment_ids", [8000000094011]);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046');

const payload = JSON.stringify({"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""content"":""Please review the updated project scope and share your feedback by end of day."",""attachment_ids"":[8000000094011],""delete_attachment_ids"":[8000000094011]}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Please review the updated project scope and share your feedback by end of day.\",\"attachment_ids\":[8000000094011],\"delete_attachment_ids\":[8000000094011]}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Please review the updated project scope and share your feedback by end of day.","attachment_ids":[8000000094011],"delete_attachment_ids":[8000000094011]}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "Please review the updated project scope and share your feedback by end of day.", "attachment_ids" : [ 8000000094011 ], "delete_attachment_ids" : [ 8000000094011 ] }

Sample Response

200{ "forum_comments" : [ { "created_time" : "2021-09-06T13:13:28.338Z", "is_best_answer" : false, "attachments" : [ { "created_time" : "1630645458444", "associated_time_long" : "1630645555361", "third_party_file_id" : "6157663000000038001", "app_domain" : "zfsGlobal", "type" : "image/png", "entity_id" : "1752587000000095001", "created_by" : "patricia.boyle@zylker.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", "download_url" : "https://projects.zoho.com/portal/zylker/saveAttachment/download?file=projects-744cb946933a56c4a3c2baa82a53f96eb8dc207125648efcfff2c3e833760cf266667c2b71c2ebb3675bbf2211feb1dac07ddcf3c614913130afcf0f0add9d4c", "app_id" : "2", "trashed" : false } ], "last_modified_time" : "2021-09-06T13:16:23.546Z", "level" : "2", "status_info" : "0", "last_modified_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "type" : "normal", "content" : "Projects Comments", "forum_id" : "1752587000000095015", "parent_posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "added_via" : "web", "parent_id" : "1752587000000097003", "posted_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "id" : "738624987", "is_client_user" : false, "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com" }, "root_id" : "1752587000000097003", "id" : "1752587000000096019" } ] }
Delete Comment

Delete a comment from a specific forum in a project. Use this API to permanently remove a comment from a forum within a project.

DELETE

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

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Mark Comment as Best Answer

Mark a specific comment as the best answer in a forum. Use this API to highlight the most helpful response within a forum discussion.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments/[COMMENTID]/markbestanswer

OAuth Scope:

ZohoProjects.forums.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046/markbestanswer");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "is_best_answer" : true, "comment_id" : 1752587000000096000 }
Unmark Comment as Best Answer

Remove the best answer designation from a specific comment in a forum. Use this API to unmark a comment that was previously marked as the best answer in a forum discussion.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/comments/[COMMENTID]/markbestanswer

OAuth Scope:

ZohoProjects.forums.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/comments/1752587000000097046/markbestanswer");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/comments/1752587000000097046/markbestanswer")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 all forum categories in a specific project. Use this API to access the list of categories available for forums within a project.

GET

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

OAuth Scope:

ZohoProjects.forums.READ

Query Parameter

Param Name
Data Type
Description
page

int

default : 1

Enter the page number.

per_page

int

limit : 1-200
default : 100

Enter the number of entries to be displayed per page.

sort_by

String

Enter the sort criteria for the categories. Accepted values: created_time, updated_time

sort_order

String

Enter the sort order for the categories. Accepted values: asc, desc

searchTerm

String

Enter the search term to filter categories.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories?page=1&per_page=10&sort_by=created_time&sort_order=desc&searchTerm=-' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "created_time");
params.put("sort_order", "desc");
params.put("searchTerm", "-");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'created_time');
url.searchParams.append('sort_order', 'desc');
url.searchParams.append('searchTerm', '-');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories")
params = {
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "created_time",
  "sort_order" => "desc",
  "searchTerm" => "-"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'created_time',
    'sort_order' => 'desc',
    'searchTerm' => '-',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories"

params = {
    "page": "1",
    "per_page": "10",
    "sort_by": "created_time",
    "sort_order": "desc",
    "searchTerm": "-"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "created_time", 0);
        char *enc_sort_order = curl_easy_escape(curl, "desc", 0);
        char *enc_searchTerm = curl_easy_escape(curl, "-", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories?page=%s&per_page=%s&sort_by=%s&sort_order=%s&searchTerm=%s", enc_page, enc_per_page, enc_sort_by, enc_sort_order, enc_searchTerm);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_sort_order);
        curl_free(enc_searchTerm);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "created_time";
query["sort_order"] = "desc";
query["searchTerm"] = "-";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "created_time", 0);
        char* enc_sort_order = curl_easy_escape(curl, "desc", 0);
        char* enc_searchTerm = curl_easy_escape(curl, "-", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);
        url += "&sort_order=" + std::string(enc_sort_order);
        url += "&searchTerm=" + std::string(enc_searchTerm);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_free(enc_sort_order);
        curl_free(enc_searchTerm);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "created_time" "UTF-8")
      enc-sort_order (java.net.URLEncoder/encode "desc" "UTF-8")
      enc-searchTerm (java.net.URLEncoder/encode "-" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by "&sort_order=" enc-sort_order "&searchTerm=" enc-searchTerm)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "created_time")
    q.Add("sort_order", "desc")
    q.Add("searchTerm", "-")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories?page=1&per_page=10&sort_by=created_time&sort_order=desc&searchTerm=- HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "created_time");
uriBuilder.addParameter("sort_order", "desc");
uriBuilder.addParameter("searchTerm", "-");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  'sort_by': 'created_time',
  'sort_order': 'desc',
  'searchTerm': '-'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
sort_by = "created_time"
sort_order = "desc"
searchTerm =  - 
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "created_time")
    urlBuilder.addQueryParameter("sort_order", "desc")
    urlBuilder.addQueryParameter("searchTerm", "-")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"created_time" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_order = [@"desc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSearchTerm = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories?page=%@&per_page=%@&sort_by=%@&sort_order=%@&searchTerm=%@", encodedPage, encodedPer_page, encodedSort_by, encodedSort_order, encodedSearchTerm];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "created_time" in
  let enc_sort_order = Uri.pct_encode "desc" in
  let enc_searchTerm = Uri.pct_encode "-" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by ^ "&sort_order=" ^ enc_sort_order ^ "&searchTerm=" ^ enc_searchTerm) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    sort_by = "created_time"
    sort_order = "desc"
    searchTerm = "-"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories"

params <- list(
  page = "1",
  per_page = "10",
  sort_by = "created_time",
  sort_order = "desc",
  searchTerm = "-"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "created_time"),
    URLQueryItem(name: "sort_order", value: "desc"),
    URLQueryItem(name: "searchTerm", value: "-")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" sort_by : "created_time" sort_order : "desc" searchTerm : -

Sample Response

200{ "categories" : [ { "name" : "Inventory Discussion", "id" : "9000000005825" } ] }
Add Category

Add a new category for forums in a specific project. Use this API to create a forum category to organize discussions within a project.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Software Development"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories";
params = Map();
params.put("name", "Software Development");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories');

const payload = JSON.stringify({"name":"Software Development"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Software Development"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Software Development"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Software Development"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Software Development\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories");
request.Content = new StringContent(
    @"{""name"":""Software Development""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Software Development\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Software Development\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Software Development\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Software Development"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Software Development\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Software Development"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Software Development"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Software Development"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Software Development\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Software Development"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Software Development"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Software Development\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Software Development"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Software Development" }

Sample Response

201{ "categories" : [ { "name" : "Inventory Discussion", "id" : "9000000005821" } ] }

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

Update Category

Update a forum category in a specific project. Use this API to modify the name of an existing forum category within 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Software Development"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234";
params = Map();
params.put("name", "Software Development");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234');

const payload = JSON.stringify({"name":"Software Development"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Software Development"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"Software Development"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Software Development"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Software Development\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234");
request.Content = new StringContent(
    @"{""name"":""Software Development""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Software Development\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Software Development\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Software Development\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Software Development"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Software Development\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Software Development"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Software Development"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Software Development"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Software Development\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Software Development"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Software Development"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Software Development\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Software Development"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Software Development" }

Sample Response

200{ "categories" : [ { "name" : "Inventory Discussion", "id" : "9000000005825" } ] }
Delete Category

Delete a forum category from a specific project. Use this API to permanently remove a forum category within a project.

DELETE

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

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/categories/1752587000000097234")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Retrieve all followers of a specific forum in a project. Use this API to access the list of users subscribed to forum notifications within a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/followers

OAuth Scope:

ZohoProjects.forums.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/followers")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "followers" : [ { "zpuid" : "1752587000000043001", "name" : "Davis Allen", "last_name" : "Boyle", "id" : "739604840", "is_client_user" : false, "first_name" : "Davis", "email" : "davis.allen@zylker.com" }, { "zpuid" : "1752587000000097013", "name" : "Riley Grant", "last_name" : "Grant", "id" : "759539796", "is_client_user" : false, "first_name" : "Riley", "email" : "monica.hemsworth@zylker.com" } ] }
Follow Forum

Follow a specific forum in a project to receive notifications. Use this API to subscribe a user to forum updates within a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/follow

OAuth Scope:

ZohoProjects.forums.CREATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/follow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Unfollow Forum

Unfollow a specific forum in a project to stop receiving notifications. Use this API to unsubscribe a user from forum updates within a project.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/forums/[FORUMID]/unfollow

OAuth Scope:

ZohoProjects.forums.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/forums/1752587000000097035/unfollow")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 all events associated with a specific project. Use this API to access the list of events scheduled within a project.

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

Enter the number of entries to be displayed per page.

JSONObject

Enter the filter criteria to narrow down the event results.

status

String

Enter the status of the events to retrieve. Accepted values: open, completed

ids

String

Enter the IDs of the specific events to retrieve.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&status=-&ids=4000000029001' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"});
params.put("status", "-");
params.put("ids", "4000000029001");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}');
url.searchParams.append('status', '-');
url.searchParams.append('ids', '4000000029001');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events")
params = {
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  "status" => "-",
  "ids" => "4000000029001"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
    'status' => '-',
    'ids' => '4000000029001',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events"

params = {
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
    "status": "-",
    "ids": "4000000029001"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_status = curl_easy_escape(curl, "-", 0);
        char *enc_ids = curl_easy_escape(curl, "4000000029001", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events?page=%s&per_page=%s&\"filter\"=%s&status=%s&ids=%s", enc_page, enc_per_page, enc_"filter", enc_status, enc_ids);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_status);
        curl_free(enc_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
query["status"] = "-";
query["ids"] = "4000000029001";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_status = curl_easy_escape(curl, "-", 0);
        char* enc_ids = curl_easy_escape(curl, "4000000029001", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&status=" + std::string(enc_status);
        url += "&ids=" + std::string(enc_ids);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_status);
        curl_free(enc_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-status (java.net.URLEncoder/encode "-" "UTF-8")
      enc-ids (java.net.URLEncoder/encode "4000000029001" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events" "?page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&status=" enc-status "&ids=" enc-ids)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("status", "-")
    q.Add("ids", "4000000029001")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&status=-&ids=4000000029001 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("status", "-");
uriBuilder.addParameter("ids", "4000000029001");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
  'status': '-',
  'ids': '4000000029001'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}
status =  - 
ids = "4000000029001"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("status", "-")
    urlBuilder.addQueryParameter("ids", "4000000029001")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedStatus = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIds = [@"4000000029001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events?page=%@&per_page=%@&"filter"=%@&status=%@&ids=%@", encodedPage, encodedPer_page, encoded"filter", encodedStatus, encodedIds];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_status = Uri.pct_encode "-" in
  let enc_ids = Uri.pct_encode "4000000029001" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&status=" ^ enc_status ^ "&ids=" ^ enc_ids) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"-`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"-`",`"unit`":`"-`",`"prior`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
    status = "-"
    ids = "4000000029001"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events"

params <- list(
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  status = "-",
  ids = "4000000029001"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "status", value: "-"),
    URLQueryItem(name: "ids", value: "4000000029001")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "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 a specific event in a project. Use this API to access the full information of an event within a project.

GET

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

OAuth Scope:

ZohoProjects.events.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Participants

Retrieve all participants of a specific event in a portal. Use this API to access the list of users participating in an event.

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 to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/events/[EVENTID]/participants")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Event

Add a new event to a specific project. Use this API to create and schedule an event within a project.

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 of the event. Format: ISO 8601

ends_at

String

required

Enter the end date and time of the event. Format: ISO 8601

remind_before

String

Enter the reminder duration before the event starts.

recurrence_frequency

String

Enter the recurrence frequency of the event. Accepted values: only once, every day, every week, every month, every year

recurrence_count

int

Enter the number of times the event should recur.

location

String

max length : 200

Enter the location of the event.

attendees

JSONArray

required
max length : 7000
array size : 0-500

Enter the ZPUIDs of the attendees for the event.

attachment_ids

JSONArray

Enter the IDs of the attachments to associate with the event.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events' \
-H 'Authorization: Bearer 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]"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events";
params = Map();
params.put("title", "admin Event");
params.put("starts_at", "2022-06-15T12:48:53.523Z");
params.put("ends_at", "2022-06-15T13:48:53.524Z");
params.put("remind_before", "on time");
params.put("recurrence_frequency", "every day");
params.put("recurrence_count", "5");
params.put("location", "chennai");
params.put("attendees", "[23806000000152047]");
params.put("attachment_ids", " [23806000097572061]");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events');

const payload = JSON.stringify({"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]"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"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]"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"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]"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"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]"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events");
request.Content = new StringContent(
    @"{""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]""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"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]\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"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]\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
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]"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"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]"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"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]"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"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]"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"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]\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {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]"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"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]"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"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]\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"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]"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Modify the details of a specific event in a project.

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

Enter the updated title of the event.

starts_at

String

Enter the updated start date and time of the event. Format: ISO 8601

ends_at

String

Enter the updated end date and time of the event. Format: ISO 8601

remind_before

String

Enter the reminder duration before the event starts.

recurrence_frequency

String

Enter the recurrence frequency of the event. Accepted values: only once, every day, every week, every month, every year

recurrence_count

int

Enter the number of times the event should recur.

location

String

max length : 200

Enter the updated location of the event.

attendees

JSONArray

max length : 7000
array size : 0-500

Enter the updated list of attendee ZPUIDs for the event.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]' \
-H 'Authorization: Bearer 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]"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]";
params = Map();
params.put("title", "admin Event");
params.put("starts_at", "2022-06-15T12:48:53.523Z");
params.put("ends_at", "2022-06-15T13:48:53.524Z");
params.put("remind_before", "on time");
params.put("recurrence_frequency", "every day");
params.put("recurrence_count", "5");
params.put("location", "chennai");
params.put("attendees", "[23806000000152047]");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]');

const payload = JSON.stringify({"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]"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"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]"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"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]"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"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]"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");
request.Content = new StringContent(
    @"{""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]""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"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]\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"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]\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
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]"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"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]"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"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]"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"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]"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"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]\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {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]"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"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]"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"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]\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"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]"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Event

Remove a specific event from a project. Use this API to permanently remove an event from a project.

DELETE

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

OAuth Scope:

ZohoProjects.events.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 all comments on a specific event in a project. Use this API to access the list of comments posted on an event within a project.

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 to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments?page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments";
params = Map();
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments")
params = {
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments"

params = {
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments?page=%s&per_page=%s", enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments";
        url += "?page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments" "?page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments", nil)
    q := req.URL.Query()
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments?page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/comments");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments';

const params = new URLSearchParams({
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments?page=%@&per_page=%@", encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments"

params <- list(
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments")!
components.queryItems = [
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

page : "1" per_page : "10"

Sample Response

200{ }
Get Event Comment by ID

Retrieve the details of a specific event comment using its comment ID. Use this API to access an event comment without requiring the event ID.

GET

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

OAuth Scope:

ZohoProjects.events.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/eventcomments/[EVENTCOMMENTID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Event Comment

Add a comment to a specific event in a project. Use this API to post a comment on an event within a project.

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

Enter the content of the event comment.

attachment_ids

JSONArray

Enter the IDs of the attachments to associate with the comment.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments";
params = Map();
params.put("content", "Zoho Projects API");
params.put("attachment_ids", " [23806000097572061]");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments');

const payload = JSON.stringify({"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments");
request.Content = new StringContent(
    @"{""content"":""Zoho Projects API"",""attachment_ids"":"" [23806000097572061]""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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]/comments");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Modify a specific comment on an event in a project.

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

Enter the updated content of the event comment.

attachment_ids

JSONArray

Enter the IDs of the attachments to associate with the comment.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046";
params = Map();
params.put("content", "Zoho Projects API");
params.put("attachment_ids", " [23806000097572061]");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046');

const payload = JSON.stringify({"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046");
request.Content = new StringContent(
    @"{""content"":""Zoho Projects API"",""attachment_ids"":"" [23806000097572061]""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"content\":\"Zoho Projects API\",\"attachment_ids\":\" [23806000097572061]\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"content":"Zoho Projects API","attachment_ids":" [23806000097572061]"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "content" : "Zoho Projects API", "attachment_ids" : " [23806000097572061]" }

Sample Response

204 No Content
Delete Event Comment

Remove a specific comment from an event in a project.

DELETE

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

OAuth Scope:

ZohoProjects.events.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/comments/1752587000000097046");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/events/[EVENTID]/comments/1752587000000097046")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Users

Retrieve all users, client users, contacts, and resources in a specific portal. Use this API to access the complete list of users and their details within a 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 to filter the results. Accepted values: 1 (Users), 2 (Client Users), 3 (Client Contacts), 6 (Resources)

view_type

String

Enter the view type to filter users by status. Accepted values: 0 (Inactive), 1 (Active)

sort

String

Enter the sort criteria for the results. Example: alphabetical:asc. Accepted values: alphabetical, last_accessed_time, role, profile, added_time with 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 to narrow down the user results.

ids

String

Enter the IDs of the users to retrieve.

company_ids

String

Enter the IDs of the client companies to filter the users.

view

String

Enter the data view type. Accepted values: list, grid

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users?type=1&view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=23806000006417155&company_ids=170876000003941041&view=list' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users";
params = Map();
params.put("type", "1");
params.put("view_type", "1");
params.put("sort", "alphabetical:asc");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"});
params.put("ids", "23806000006417155");
params.put("company_ids", "170876000003941041");
params.put("view", "list");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users');
url.searchParams.append('type', '1');
url.searchParams.append('view_type', '1');
url.searchParams.append('sort', 'alphabetical:asc');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}');
url.searchParams.append('ids', '23806000006417155');
url.searchParams.append('company_ids', '170876000003941041');
url.searchParams.append('view', 'list');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users")
params = {
  "type" => "1",
  "view_type" => "1",
  "sort" => "alphabetical:asc",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  "ids" => "23806000006417155",
  "company_ids" => "170876000003941041",
  "view" => "list"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'type' => '1',
    'view_type' => '1',
    'sort' => 'alphabetical:asc',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
    'ids' => '23806000006417155',
    'company_ids' => '170876000003941041',
    'view' => 'list',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users"

params = {
    "type": "1",
    "view_type": "1",
    "sort": "alphabetical:asc",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
    "ids": "23806000006417155",
    "company_ids": "170876000003941041",
    "view": "list"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_type = curl_easy_escape(curl, "1", 0);
        char *enc_view_type = curl_easy_escape(curl, "1", 0);
        char *enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_ids = curl_easy_escape(curl, "23806000006417155", 0);
        char *enc_company_ids = curl_easy_escape(curl, "170876000003941041", 0);
        char *enc_view = curl_easy_escape(curl, "list", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users?type=%s&view_type=%s&sort=%s&page=%s&per_page=%s&\"filter\"=%s&ids=%s&company_ids=%s&view=%s", enc_type, enc_view_type, enc_sort, enc_page, enc_per_page, enc_"filter", enc_ids, enc_company_ids, enc_view);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_type);
        curl_free(enc_view_type);
        curl_free(enc_sort);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_free(enc_company_ids);
        curl_free(enc_view);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["type"] = "1";
query["view_type"] = "1";
query["sort"] = "alphabetical:asc";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
query["ids"] = "23806000006417155";
query["company_ids"] = "170876000003941041";
query["view"] = "list";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_type = curl_easy_escape(curl, "1", 0);
        char* enc_view_type = curl_easy_escape(curl, "1", 0);
        char* enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_ids = curl_easy_escape(curl, "23806000006417155", 0);
        char* enc_company_ids = curl_easy_escape(curl, "170876000003941041", 0);
        char* enc_view = curl_easy_escape(curl, "list", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users";
        url += "?type=" + std::string(enc_type);
        url += "&view_type=" + std::string(enc_view_type);
        url += "&sort=" + std::string(enc_sort);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&ids=" + std::string(enc_ids);
        url += "&company_ids=" + std::string(enc_company_ids);
        url += "&view=" + std::string(enc_view);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_type);
        curl_free(enc_view_type);
        curl_free(enc_sort);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_free(enc_company_ids);
        curl_free(enc_view);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "1" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "1" "UTF-8")
      enc-sort (java.net.URLEncoder/encode "alphabetical:asc" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-ids (java.net.URLEncoder/encode "23806000006417155" "UTF-8")
      enc-company_ids (java.net.URLEncoder/encode "170876000003941041" "UTF-8")
      enc-view (java.net.URLEncoder/encode "list" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users" "?type=" enc-type "&view_type=" enc-view_type "&sort=" enc-sort "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&ids=" enc-ids "&company_ids=" enc-company_ids "&view=" enc-view)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users", nil)
    q := req.URL.Query()
    q.Add("type", "1")
    q.Add("view_type", "1")
    q.Add("sort", "alphabetical:asc")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("ids", "23806000006417155")
    q.Add("company_ids", "170876000003941041")
    q.Add("view", "list")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users?type=1&view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=23806000006417155&company_ids=170876000003941041&view=list HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("type", "1");
uriBuilder.addParameter("view_type", "1");
uriBuilder.addParameter("sort", "alphabetical:asc");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("ids", "23806000006417155");
uriBuilder.addParameter("company_ids", "170876000003941041");
uriBuilder.addParameter("view", "list");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users';

const params = new URLSearchParams({
  'type': '1',
  'view_type': '1',
  'sort': 'alphabetical:asc',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
  'ids': '23806000006417155',
  'company_ids': '170876000003941041',
  'view': 'list'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
type = "1"
view_type = "1"
sort = "alphabetical:asc"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}
ids = "23806000006417155"
company_ids = "170876000003941041"
view = "list"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "1")
    urlBuilder.addQueryParameter("view_type", "1")
    urlBuilder.addQueryParameter("sort", "alphabetical:asc")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("ids", "23806000006417155")
    urlBuilder.addQueryParameter("company_ids", "170876000003941041")
    urlBuilder.addQueryParameter("view", "list")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedType = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort = [@"alphabetical:asc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIds = [@"23806000006417155" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedCompany_ids = [@"170876000003941041" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView = [@"list" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users?type=%@&view_type=%@&sort=%@&page=%@&per_page=%@&"filter"=%@&ids=%@&company_ids=%@&view=%@", encodedType, encodedView_type, encodedSort, encodedPage, encodedPer_page, encoded"filter", encodedIds, encodedCompany_ids, encodedView];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_type = Uri.pct_encode "1" in
  let enc_view_type = Uri.pct_encode "1" in
  let enc_sort = Uri.pct_encode "alphabetical:asc" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_ids = Uri.pct_encode "23806000006417155" in
  let enc_company_ids = Uri.pct_encode "170876000003941041" in
  let enc_view = Uri.pct_encode "list" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users" ^ "?type=" ^ enc_type ^ "&view_type=" ^ enc_view_type ^ "&sort=" ^ enc_sort ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&ids=" ^ enc_ids ^ "&company_ids=" ^ enc_company_ids ^ "&view=" ^ enc_view) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    type = "1"
    view_type = "1"
    sort = "alphabetical:asc"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"-`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"-`",`"unit`":`"-`",`"prior`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
    ids = "23806000006417155"
    company_ids = "170876000003941041"
    view = "list"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users"

params <- list(
  type = "1",
  view_type = "1",
  sort = "alphabetical:asc",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  ids = "23806000006417155",
  company_ids = "170876000003941041",
  view = "list"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users")!
components.queryItems = [
    URLQueryItem(name: "type", value: "1"),
    URLQueryItem(name: "view_type", value: "1"),
    URLQueryItem(name: "sort", value: "alphabetical:asc"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "ids", value: "23806000006417155"),
    URLQueryItem(name: "company_ids", value: "170876000003941041"),
    URLQueryItem(name: "view", value: "list")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

type : "1" view_type : "1" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ids : "23806000006417155" company_ids : "170876000003941041" view : "list"

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" } } ] }

Possible Errors

UNKNOWN_PARAMETER HTTP 400

INVALID_PARAMETER_VALUE HTTP 400

USER_HIERARCHY_PLAN_RESTRICTION HTTP 403

Get User Details

Retrieve the details of a specific user in a portal. Use this API to access the full profile and information of a user within a portal.

GET

/api/v3/portal/[PORTALID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Get Associated Project(s)

Retrieve all projects associated with a specific user in a portal. Use this API to access the list of projects a user is part of within a 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 status of the projects to retrieve. Accepted values: active, archived

search_term

String

Enter a search term to filter the projects.

page

int

Enter the page number.

per_page

int

Enter the number of entries to be displayed per page.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects?status=active&search_term=Monica&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects";
params = Map();
params.put("status", "active");
params.put("search_term", "Monica");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects');
url.searchParams.append('status', 'active');
url.searchParams.append('search_term', 'Monica');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects")
params = {
  "status" => "active",
  "search_term" => "Monica",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'status' => 'active',
    'search_term' => 'Monica',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects"

params = {
    "status": "active",
    "search_term": "Monica",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_status = curl_easy_escape(curl, "active", 0);
        char *enc_search_term = curl_easy_escape(curl, "Monica", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects?status=%s&search_term=%s&page=%s&per_page=%s", enc_status, enc_search_term, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_status);
        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["status"] = "active";
query["search_term"] = "Monica";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_status = curl_easy_escape(curl, "active", 0);
        char* enc_search_term = curl_easy_escape(curl, "Monica", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects";
        url += "?status=" + std::string(enc_status);
        url += "&search_term=" + std::string(enc_search_term);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_status);
        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-status (java.net.URLEncoder/encode "active" "UTF-8")
      enc-search_term (java.net.URLEncoder/encode "Monica" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects" "?status=" enc-status "&search_term=" enc-search_term "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects", nil)
    q := req.URL.Query()
    q.Add("status", "active")
    q.Add("search_term", "Monica")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects?status=active&search_term=Monica&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("status", "active");
uriBuilder.addParameter("search_term", "Monica");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects';

const params = new URLSearchParams({
  'status': 'active',
  'search_term': 'Monica',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
status = "active"
search_term = "Monica"
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("status", "active")
    urlBuilder.addQueryParameter("search_term", "Monica")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedStatus = [@"active" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSearch_term = [@"Monica" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects?status=%@&search_term=%@&page=%@&per_page=%@", encodedStatus, encodedSearch_term, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_status = Uri.pct_encode "active" in
  let enc_search_term = Uri.pct_encode "Monica" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects" ^ "?status=" ^ enc_status ^ "&search_term=" ^ enc_search_term ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    status = "active"
    search_term = "Monica"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects"

params <- list(
  status = "active",
  search_term = "Monica",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[USERID]/projects")!
components.queryItems = [
    URLQueryItem(name: "status", value: "active"),
    URLQueryItem(name: "search_term", value: "Monica"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

status : "active" search_term : "Monica" page : "1" per_page : "10"

Sample Response

200{ "projects" : [ { "number" : 14, "is_owner" : false, "name" : "Software Development", "is_strict_project" : false, "id" : "8000000005863", "status" : "active", "group" : { "prefix" : "", "name" : "zp.projset.ungroupproj", "id" : "8000000025001", "is_default" : true, "type" : "public" } } ], "page_info" : { "per_page" : "100", "has_next_page" : "false", "page" : "1" } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

Get User License Details

Retrieve the license details of portal and client users in a specific portal. Use this API to access the current license usage and availability for users within a portal.

GET

/api/v3/portal/[PORTALID]/users/license-details

OAuth Scope:

ZohoProjects.users.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/license-details");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/license-details")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "lite_user" : { "used_count" : 5, "remaining_count" : 20, "total_count" : 25 }, "readonly_user" : { "used_count" : 0, "remaining_count" : 120, "total_count" : 120 }, "client_user" : { "used_count" : 0, "remaining_count" : 20, "total_count" : 20 }, "portal_user" : { "used_count" : 2, "remaining_count" : 18, "total_count" : 20 } }

Possible Errors

UNAUTHORIZED_ACCESS HTTP 401

Add User

Add a new user to the Zoho Projects portal. Use this API to invite and grant access to a user within a portal.

POST

/api/v3/portal/[PORTALID]/users

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

required

Enter the details of the users to add to the portal.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form '"userdetails" = [{"email_id":"mark@zylker.com","email_template":"-","role_id":"8000000000991","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":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","include_projects":"8000000005863","applyportalrate":"-","reporting_to":"8000000002411","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users";
params = Map();
params.put("userdetails", [{"email_id":"mark@zylker.com","email_template":"-","role_id":"8000000000991","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":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","include_projects":"8000000005863","applyportalrate":"-","reporting_to":"8000000002411","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]);
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users');
url.searchParams.append('"userdetails"', '[{"email_id":"mark@zylker.com","email_template":"-","role_id":"8000000000991","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":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","include_projects":"8000000005863","applyportalrate":"-","reporting_to":"8000000002411","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users")
params = {
  ""userdetails"" => "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    '"userdetails"' => '[{"email_id":"mark@zylker.com","email_template":"-","role_id":"8000000000991","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":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","include_projects":"8000000005863","applyportalrate":"-","reporting_to":"8000000002411","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users"

params = {
    ""userdetails"": "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users?\"userdetails\"=%s", enc_"userdetails");

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_"userdetails");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query[""userdetails""] = "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users";
        url += "?"userdetails"=" + std::string(enc_"userdetails");

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_"userdetails");
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"userdetails" (java.net.URLEncoder/encode "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users" "?"userdetails"=" enc-"userdetails")]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/users", nil)
    q := req.URL.Query()
    q.Add(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/users?%22userdetails%22=%5B%7B%22email_id%22%3A%22mark%40zylker.com%22%2C%22email_template%22%3A%22-%22%2C%22role_id%22%3A%228000000000991%22%2C%22profile_id%22%3A%222223806000000022149%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%2C%22bulk_projects%22%3A%7B%22select_all%22%3A%22false%22%2C%22selected%22%3A%7B%22group_ids%22%3A%22%5B%5C%222380600000612345%5C%22%5D%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%7D%2C%22unselected%22%3A%7B%22group_ids%22%3A%22%5B%5C%222380600000612345%5C%22%5D%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%7D%2C%22rateupdatedprojects%22%3A%7B%22longkey%22%3A%221752587000000097269%22%7D%2C%22costrateupdatedprojects%22%3A%7B%22longkey%22%3A%221752587000000097269%22%7D%7D%2C%22rate%22%3A%2255.00%22%2C%22cost_rate_per_hour%22%3A%22-%22%2C%22revenue_budget%22%3A%2214.00%22%2C%22cost_budget%22%3A%2220.00%22%2C%22budget_threshold%22%3A%2210.00%22%2C%22include_projects%22%3A%228000000005863%22%2C%22applyportalrate%22%3A%22-%22%2C%22reporting_to%22%3A%228000000002411%22%2C%22hourly_budget%22%3A%225.00%22%2C%22hourly_budget_threshold%22%3A%223.00%22%7D%5D HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users';

const params = new URLSearchParams({
  '"userdetails"': '[{"email_id":"mark@zylker.com","email_template":"-","role_id":"8000000000991","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":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","include_projects":"8000000005863","applyportalrate":"-","reporting_to":"8000000002411","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
"userdetails" = [{"email_id":"mark@zylker.com","email_template":"-","role_id":"8000000000991","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":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","include_projects":"8000000005863","applyportalrate":"-","reporting_to":"8000000002411","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encoded"userdetails" = [@"[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users?"userdetails"=%@", encoded"userdetails"];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_"userdetails" = Uri.pct_encode "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users" ^ "?"userdetails"=" ^ enc_"userdetails") in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    "userdetails" = "[{`"email_id`":`"mark@zylker.com`",`"email_template`":`"-`",`"role_id`":`"8000000000991`",`"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`":`"55.00`",`"cost_rate_per_hour`":`"-`",`"revenue_budget`":`"14.00`",`"cost_budget`":`"20.00`",`"budget_threshold`":`"10.00`",`"include_projects`":`"8000000005863`",`"applyportalrate`":`"-`",`"reporting_to`":`"8000000002411`",`"hourly_budget`":`"5.00`",`"hourly_budget_threshold`":`"3.00`"}]"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users"

params <- list(
  "userdetails" = "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users")!
components.queryItems = [
    URLQueryItem(name: ""userdetails"", value: "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"role_id\":\"8000000000991\",\"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\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"include_projects\":\"8000000005863\",\"applyportalrate\":\"-\",\"reporting_to\":\"8000000002411\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

"userdetails" : [ { "email_id" : "mark@zylker.com", "email_template" : "-", "role_id" : "8000000000991", "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" : "55.00", "cost_rate_per_hour" : "-", "revenue_budget" : "14.00", "cost_budget" : "20.00", "budget_threshold" : "10.00", "include_projects" : "8000000005863", "applyportalrate" : "-", "reporting_to" : "8000000002411", "hourly_budget" : "5.00", "hourly_budget_threshold" : "3.00" } ]

Sample Response

201{ "is_upgrade" : "false", "emailvszpuid" : { "monica.hemsworth@zylker.com" : "8000000002411" }, "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" : "24925026", "active" : 1, "reporting_to" : "zp.general.none", "REPORTING_TO" : { "zpuid" : "8000000002411", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@zylker.com", "zuid" : "24925026" }, "is_resend_invite" : false, "role_name" : "Manager", "profile_name" : "Manager", "zpuid" : "8000000002411", "last_updated_time" : 1724233008810, "role_id" : "8000000000991", "profile_id" : "8000000002347", "name" : "Monica Hemsworth", "is_user_confirmed" : false, "is_customized" : false, "is_group_user" : false, "id" : "8000000002411", "last_accessed_time" : "2024-08-21T09:56:48.810Z", "is_following" : false, "email" : "monica.hemsworth@zylker.com" } ], "is_portal_owner" : "true", "remaining_user_count" : "990", "curr_projid" : "8000000005863", "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" : [ "\"8000000002411\"" ] }

Possible Errors

USER_LIMIT_REACHED HTTP 403

USER_ADD_GENERAL_ERROR HTTP 403

USER_INVALID_EMAIL HTTP 403

READONLY_USER_LIMIT_REACHED HTTP 403

USER_ALREADY_ADDED_IN_ORG HTTP 403

USER_ADDED_IN_OTHER_DEPLOYMENT HTTP 403

INVALID_PARAMETER_VALUE HTTP 400

UNAUTHORIZED_ACCESS HTTP 401

USER_ACCOUNT_NOT_CONFIRMED HTTP 403

LITE_USER_LIMIT_REACHED HTTP 403

INPUT_PARAMETER_MISSING HTTP 400

USER_INVITE_REJECTED HTTP 403

Add Client User

Add a new client user to the Zoho Projects portal. Use this API to invite and grant client-level access to a user within a portal.

POST

/api/v3/portal/[PORTALID]/clientuser

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

required

Enter the details of the client users to add to the portal.

force_add

boolean

Specify whether to convert existing contact users to client users. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form '"userdetails" = [{"email_id":"mark@zylker.com","email_template":"-","profile_id":"2223806000000022149","company_name":"New Customer","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":"55.00","include_projects":"8000000005863","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]' --form 'force_add = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser";
params = Map();
params.put("userdetails", [{"email_id":"mark@zylker.com","email_template":"-","profile_id":"2223806000000022149","company_name":"New Customer","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":"55.00","include_projects":"8000000005863","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]);
params.put("force_add", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser');
url.searchParams.append('"userdetails"', '[{"email_id":"mark@zylker.com","email_template":"-","profile_id":"2223806000000022149","company_name":"New Customer","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":"55.00","include_projects":"8000000005863","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]');
url.searchParams.append('force_add', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser")
params = {
  ""userdetails"" => "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]",
  "force_add" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    '"userdetails"' => '[{"email_id":"mark@zylker.com","email_template":"-","profile_id":"2223806000000022149","company_name":"New Customer","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":"55.00","include_projects":"8000000005863","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]',
    'force_add' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser"

params = {
    ""userdetails"": "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]",
    "force_add": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]", 0);
        char *enc_force_add = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser?\"userdetails\"=%s&force_add=%s", enc_"userdetails", enc_force_add);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_"userdetails");
        curl_free(enc_force_add);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query[""userdetails""] = "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]";
query["force_add"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]", 0);
        char* enc_force_add = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser";
        url += "?"userdetails"=" + std::string(enc_"userdetails");
        url += "&force_add=" + std::string(enc_force_add);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_"userdetails");
        curl_free(enc_force_add);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"userdetails" (java.net.URLEncoder/encode "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" "UTF-8")
      enc-force_add (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser" "?"userdetails"=" enc-"userdetails" "&force_add=" enc-force_add)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser", nil)
    q := req.URL.Query()
    q.Add(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]")
    q.Add("force_add", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser?%22userdetails%22=%5B%7B%22email_id%22%3A%22mark%40zylker.com%22%2C%22email_template%22%3A%22-%22%2C%22profile_id%22%3A%222223806000000022149%22%2C%22company_name%22%3A%22New+Customer%22%2C%22company_id%22%3A%222223806000097701045%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%2C%22bulk_projects%22%3A%7B%22select_all%22%3A%22false%22%2C%22selected%22%3A%7B%22group_ids%22%3A%22%5B%5C%222380600000612345%5C%22%5D%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%7D%2C%22unselected%22%3A%7B%22group_ids%22%3A%22%5B%5C%222380600000612345%5C%22%5D%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%7D%2C%22rateupdatedprojects%22%3A%7B%22longkey%22%3A%221752587000000097269%22%7D%2C%22costrateupdatedprojects%22%3A%7B%22longkey%22%3A%221752587000000097269%22%7D%7D%2C%22rate%22%3A%2255.00%22%2C%22include_projects%22%3A%228000000005863%22%2C%22cost_rate_per_hour%22%3A%22-%22%2C%22revenue_budget%22%3A%2214.00%22%2C%22cost_budget%22%3A%2220.00%22%2C%22budget_threshold%22%3A%2210.00%22%2C%22hourly_budget%22%3A%225.00%22%2C%22hourly_budget_threshold%22%3A%223.00%22%7D%5D&force_add=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/clientuser");
uriBuilder.addParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]");
uriBuilder.addParameter("force_add", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser';

const params = new URLSearchParams({
  '"userdetails"': '[{"email_id":"mark@zylker.com","email_template":"-","profile_id":"2223806000000022149","company_name":"New Customer","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":"55.00","include_projects":"8000000005863","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]',
  'force_add': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
"userdetails" = [{"email_id":"mark@zylker.com","email_template":"-","profile_id":"2223806000000022149","company_name":"New Customer","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":"55.00","include_projects":"8000000005863","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","hourly_budget":"5.00","hourly_budget_threshold":"3.00"}]
force_add = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]")
    urlBuilder.addQueryParameter("force_add", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encoded"userdetails" = [@"[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedForce_add = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser?"userdetails"=%@&force_add=%@", encoded"userdetails", encodedForce_add];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_"userdetails" = Uri.pct_encode "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]" in
  let enc_force_add = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser" ^ "?"userdetails"=" ^ enc_"userdetails" ^ "&force_add=" ^ enc_force_add) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    "userdetails" = "[{`"email_id`":`"mark@zylker.com`",`"email_template`":`"-`",`"profile_id`":`"2223806000000022149`",`"company_name`":`"New Customer`",`"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`":`"55.00`",`"include_projects`":`"8000000005863`",`"cost_rate_per_hour`":`"-`",`"revenue_budget`":`"14.00`",`"cost_budget`":`"20.00`",`"budget_threshold`":`"10.00`",`"hourly_budget`":`"5.00`",`"hourly_budget_threshold`":`"3.00`"}]"
    force_add = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser"

params <- list(
  "userdetails" = "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]",
  force_add = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clientuser")!
components.queryItems = [
    URLQueryItem(name: ""userdetails"", value: "[{\"email_id\":\"mark@zylker.com\",\"email_template\":\"-\",\"profile_id\":\"2223806000000022149\",\"company_name\":\"New Customer\",\"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\":\"55.00\",\"include_projects\":\"8000000005863\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"hourly_budget\":\"5.00\",\"hourly_budget_threshold\":\"3.00\"}]"),
    URLQueryItem(name: "force_add", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

"userdetails" : [ { "email_id" : "mark@zylker.com", "email_template" : "-", "profile_id" : "2223806000000022149", "company_name" : "New Customer", "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" : "55.00", "include_projects" : "8000000005863", "cost_rate_per_hour" : "-", "revenue_budget" : "14.00", "cost_budget" : "20.00", "budget_threshold" : "10.00", "hourly_budget" : "5.00", "hourly_budget_threshold" : "3.00" } ] force_add : "true"

Sample Response

201{ "is_upgrade" : "false", "emailvszpuid" : { "monica.hemsworth@zylker.com" : "8000000002411" }, "existing_users_list" : "[]", "active_user_count" : "10", "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" : "8000000048925", "is_resend_invite" : false, "current_zpuid" : "8000000002411", "profile_name" : "client", "zpuid" : "8000000002411", "profile_id" : 8000000079017, "company_name" : "Zylker", "name" : "Monica Hemsworth", "is_user_confirmed" : false, "id" : "2", "email" : "monica.hemsworth@zylker.com" } ], "is_portal_owner" : "true", "remaining_user_count" : "990", "is_invoice_integ" : "true", "is_admin" : "true", "is_crmplus_plus" : "false", "Existing_Users" : [ { "emailId" : "monica.hemsworth@zylker.com" } ], "user_count" : { "Contractor" : "1", "jointadmin" : "1", "admin" : "1", "portalusers" : "10", "Employee" : "6", "Manager" : "1" }, "in_active_user_count" : "0", "client_user_count" : "5", "success_zpuid" : [ "8000000002411" ], "New_Users" : "[]" }

Possible Errors

USER_ALREADY_ADDED_AS_CLIENT HTTP 403

CLIENTUSER_LIMIT_REACHED HTTP 403

INVALID_PARAMETER_VALUE HTTP 400

CLIENTUSER_PROFILE_MISMATCH HTTP 403

CLIENTUSER_DOMAIN_RESTRICTION HTTP 403

Update User

Modify 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 ID of the role to assign to the user.

companyprofile

long

Enter the ID of the profile to assign to the user.

invoice

String

Enter the invoice rate per hour for the user. Example: $30 per hour

costrate

String

Enter the cost per hour for the user. Example: $15 per hour

isapplyportalrate

boolean

Specify whether to apply the portal-level rate to the user. Accepted values: true or false

bulkprojects

JSONObject

Enter the project assignment details for the user.

reporting_to

long

Enter the ZPUID of the user's reporting manager.

notify

boolean

Specify whether to notify the user about the profile update. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'companyrole = "170876000004915003"' --form 'companyprofile = "170876000003941041"' --form 'invoice = "30.00"' --form 'costrate = "15.00"' --form 'isapplyportalrate = false' --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_to = "8000000002411"' --form 'notify = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]";
params = Map();
params.put("companyrole", "170876000004915003");
params.put("companyprofile", "170876000003941041");
params.put("invoice", "30.00");
params.put("costrate", "15.00");
params.put("isapplyportalrate", false);
params.put("bulkprojects", {"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}});
params.put("reporting_to", "8000000002411");
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]');
url.searchParams.append('companyrole', '170876000004915003');
url.searchParams.append('companyprofile', '170876000003941041');
url.searchParams.append('invoice', '30.00');
url.searchParams.append('costrate', '15.00');
url.searchParams.append('isapplyportalrate', 'false');
url.searchParams.append('"bulkprojects"', '{"select_all":"false","selected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"unselected":{"group_ids":"[\"2380600000612345\"]","project_ids":"[\"23806000074760021\"]"},"rateupdatedprojects":{"longkey":"1752587000000097269"},"costrateupdatedprojects":{"longkey":"1752587000000097269"}}');
url.searchParams.append('reporting_to', '8000000002411');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]")
params = {
  "companyrole" => "170876000004915003",
  "companyprofile" => "170876000003941041",
  "invoice" => "30.00",
  "costrate" => "15.00",
  "isapplyportalrate" => "false",
  ""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_to" => "8000000002411",
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'companyrole' => '170876000004915003',
    'companyprofile' => '170876000003941041',
    'invoice' => '30.00',
    'costrate' => '15.00',
    'isapplyportalrate' => 'false',
    '"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_to' => '8000000002411',
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"

params = {
    "companyrole": "170876000004915003",
    "companyprofile": "170876000003941041",
    "invoice": "30.00",
    "costrate": "15.00",
    "isapplyportalrate": "false",
    ""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_to": "8000000002411",
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_companyrole = curl_easy_escape(curl, "170876000004915003", 0);
        char *enc_companyprofile = curl_easy_escape(curl, "170876000003941041", 0);
        char *enc_invoice = curl_easy_escape(curl, "30.00", 0);
        char *enc_costrate = curl_easy_escape(curl, "15.00", 0);
        char *enc_isapplyportalrate = curl_easy_escape(curl, "false", 0);
        char *enc_"bulkprojects" = curl_easy_escape(curl, "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\\"2380600000612345\\\"]\",\"project_ids\":\"[\\\"23806000074760021\\\"]\"},\"unselected\":{\"group_ids\":\"[\\\"2380600000612345\\\"]\",\"project_ids\":\"[\\\"23806000074760021\\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}", 0);
        char *enc_reporting_to = curl_easy_escape(curl, "8000000002411", 0);
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]?companyrole=%s&companyprofile=%s&invoice=%s&costrate=%s&isapplyportalrate=%s&\"bulkprojects\"=%s&reporting_to=%s&notify=%s", enc_companyrole, enc_companyprofile, enc_invoice, enc_costrate, enc_isapplyportalrate, enc_"bulkprojects", enc_reporting_to, enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_companyrole);
        curl_free(enc_companyprofile);
        curl_free(enc_invoice);
        curl_free(enc_costrate);
        curl_free(enc_isapplyportalrate);
        curl_free(enc_"bulkprojects");
        curl_free(enc_reporting_to);
        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["companyrole"] = "170876000004915003";
query["companyprofile"] = "170876000003941041";
query["invoice"] = "30.00";
query["costrate"] = "15.00";
query["isapplyportalrate"] = "false";
query[""bulkprojects""] = "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"unselected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}";
query["reporting_to"] = "8000000002411";
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_companyrole = curl_easy_escape(curl, "170876000004915003", 0);
        char* enc_companyprofile = curl_easy_escape(curl, "170876000003941041", 0);
        char* enc_invoice = curl_easy_escape(curl, "30.00", 0);
        char* enc_costrate = curl_easy_escape(curl, "15.00", 0);
        char* enc_isapplyportalrate = curl_easy_escape(curl, "false", 0);
        char* enc_"bulkprojects" = curl_easy_escape(curl, "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\\"2380600000612345\\\"]\",\"project_ids\":\"[\\\"23806000074760021\\\"]\"},\"unselected\":{\"group_ids\":\"[\\\"2380600000612345\\\"]\",\"project_ids\":\"[\\\"23806000074760021\\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}", 0);
        char* enc_reporting_to = curl_easy_escape(curl, "8000000002411", 0);
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]";
        url += "?companyrole=" + std::string(enc_companyrole);
        url += "&companyprofile=" + std::string(enc_companyprofile);
        url += "&invoice=" + std::string(enc_invoice);
        url += "&costrate=" + std::string(enc_costrate);
        url += "&isapplyportalrate=" + std::string(enc_isapplyportalrate);
        url += "&"bulkprojects"=" + std::string(enc_"bulkprojects");
        url += "&reporting_to=" + std::string(enc_reporting_to);
        url += "&notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_companyrole);
        curl_free(enc_companyprofile);
        curl_free(enc_invoice);
        curl_free(enc_costrate);
        curl_free(enc_isapplyportalrate);
        curl_free(enc_"bulkprojects");
        curl_free(enc_reporting_to);
        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-companyrole (java.net.URLEncoder/encode "170876000004915003" "UTF-8")
      enc-companyprofile (java.net.URLEncoder/encode "170876000003941041" "UTF-8")
      enc-invoice (java.net.URLEncoder/encode "30.00" "UTF-8")
      enc-costrate (java.net.URLEncoder/encode "15.00" "UTF-8")
      enc-isapplyportalrate (java.net.URLEncoder/encode "false" "UTF-8")
      enc-"bulkprojects" (java.net.URLEncoder/encode "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"unselected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}" "UTF-8")
      enc-reporting_to (java.net.URLEncoder/encode "8000000002411" "UTF-8")
      enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" "?companyrole=" enc-companyrole "&companyprofile=" enc-companyprofile "&invoice=" enc-invoice "&costrate=" enc-costrate "&isapplyportalrate=" enc-isapplyportalrate "&"bulkprojects"=" enc-"bulkprojects" "&reporting_to=" enc-reporting_to "&notify=" enc-notify)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]", nil)
    q := req.URL.Query()
    q.Add("companyrole", "170876000004915003")
    q.Add("companyprofile", "170876000003941041")
    q.Add("invoice", "30.00")
    q.Add("costrate", "15.00")
    q.Add("isapplyportalrate", "false")
    q.Add(""bulkprojects"", "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"unselected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}")
    q.Add("reporting_to", "8000000002411")
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]?companyrole=170876000004915003&companyprofile=170876000003941041&invoice=30.00&costrate=15.00&isapplyportalrate=false&%22bulkprojects%22=%7B%22select_all%22%3A%22false%22%2C%22selected%22%3A%7B%22group_ids%22%3A%22%5B%5C%222380600000612345%5C%22%5D%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%7D%2C%22unselected%22%3A%7B%22group_ids%22%3A%22%5B%5C%222380600000612345%5C%22%5D%22%2C%22project_ids%22%3A%22%5B%5C%2223806000074760021%5C%22%5D%22%7D%2C%22rateupdatedprojects%22%3A%7B%22longkey%22%3A%221752587000000097269%22%7D%2C%22costrateupdatedprojects%22%3A%7B%22longkey%22%3A%221752587000000097269%22%7D%7D&reporting_to=8000000002411&notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]");
uriBuilder.addParameter("companyrole", "170876000004915003");
uriBuilder.addParameter("companyprofile", "170876000003941041");
uriBuilder.addParameter("invoice", "30.00");
uriBuilder.addParameter("costrate", "15.00");
uriBuilder.addParameter("isapplyportalrate", "false");
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_to", "8000000002411");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]';

const params = new URLSearchParams({
  'companyrole': '170876000004915003',
  'companyprofile': '170876000003941041',
  'invoice': '30.00',
  'costrate': '15.00',
  'isapplyportalrate': 'false',
  '"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_to': '8000000002411',
  'notify': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
companyrole = "170876000004915003"
companyprofile = "170876000003941041"
invoice = "30.00"
costrate = "15.00"
isapplyportalrate = false
"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_to = "8000000002411"
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("companyrole", "170876000004915003")
    urlBuilder.addQueryParameter("companyprofile", "170876000003941041")
    urlBuilder.addQueryParameter("invoice", "30.00")
    urlBuilder.addQueryParameter("costrate", "15.00")
    urlBuilder.addQueryParameter("isapplyportalrate", "false")
    urlBuilder.addQueryParameter(""bulkprojects"", "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"unselected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}")
    urlBuilder.addQueryParameter("reporting_to", "8000000002411")
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedCompanyrole = [@"170876000004915003" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedCompanyprofile = [@"170876000003941041" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedInvoice = [@"30.00" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedCostrate = [@"15.00" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIsapplyportalrate = [@"false" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"bulkprojects" = [@"{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\\"2380600000612345\\\"]\",\"project_ids\":\"[\\\"23806000074760021\\\"]\"},\"unselected\":{\"group_ids\":\"[\\\"2380600000612345\\\"]\",\"project_ids\":\"[\\\"23806000074760021\\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedReporting_to = [@"8000000002411" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]?companyrole=%@&companyprofile=%@&invoice=%@&costrate=%@&isapplyportalrate=%@&"bulkprojects"=%@&reporting_to=%@&notify=%@", encodedCompanyrole, encodedCompanyprofile, encodedInvoice, encodedCostrate, encodedIsapplyportalrate, encoded"bulkprojects", encodedReporting_to, encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_companyrole = Uri.pct_encode "170876000004915003" in
  let enc_companyprofile = Uri.pct_encode "170876000003941041" in
  let enc_invoice = Uri.pct_encode "30.00" in
  let enc_costrate = Uri.pct_encode "15.00" in
  let enc_isapplyportalrate = Uri.pct_encode "false" in
  let enc_"bulkprojects" = Uri.pct_encode "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"unselected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}" in
  let enc_reporting_to = Uri.pct_encode "8000000002411" in
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" ^ "?companyrole=" ^ enc_companyrole ^ "&companyprofile=" ^ enc_companyprofile ^ "&invoice=" ^ enc_invoice ^ "&costrate=" ^ enc_costrate ^ "&isapplyportalrate=" ^ enc_isapplyportalrate ^ "&"bulkprojects"=" ^ enc_"bulkprojects" ^ "&reporting_to=" ^ enc_reporting_to ^ "&notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    companyrole = "170876000004915003"
    companyprofile = "170876000003941041"
    invoice = "30.00"
    costrate = "15.00"
    isapplyportalrate = "false"
    "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_to = "8000000002411"
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"

params <- list(
  companyrole = "170876000004915003",
  companyprofile = "170876000003941041",
  invoice = "30.00",
  costrate = "15.00",
  isapplyportalrate = "false",
  "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_to = "8000000002411",
  notify = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]")!
components.queryItems = [
    URLQueryItem(name: "companyrole", value: "170876000004915003"),
    URLQueryItem(name: "companyprofile", value: "170876000003941041"),
    URLQueryItem(name: "invoice", value: "30.00"),
    URLQueryItem(name: "costrate", value: "15.00"),
    URLQueryItem(name: "isapplyportalrate", value: "false"),
    URLQueryItem(name: ""bulkprojects"", value: "{\"select_all\":\"false\",\"selected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"unselected\":{\"group_ids\":\"[\\"2380600000612345\\"]\",\"project_ids\":\"[\\"23806000074760021\\"]\"},\"rateupdatedprojects\":{\"longkey\":\"1752587000000097269\"},\"costrateupdatedprojects\":{\"longkey\":\"1752587000000097269\"}}"),
    URLQueryItem(name: "reporting_to", value: "8000000002411"),
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

companyrole : "170876000004915003" companyprofile : "170876000003941041" invoice : "30.00" costrate : "15.00" isapplyportalrate : false "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_to : "8000000002411" 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" }

Possible Errors

USER_DOES_NOT_HAVE_PERMISSION_FOR_THE_PROFILE HTTP 403

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

UNAUTHORIZED_ACCESS HTTP 401

INVALID_PROFILE_ID HTTP 400

Activate User

Activate a specific user in a portal. Use this API to restore a deactivated user's access to the 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'notify = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate";
params = Map();
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate")
params = {
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate"

params = {
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate?notify=%s", enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate";
        url += "?notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate" "?notify=" enc-notify)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate", nil)
    q := req.URL.Query()
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate?notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/activate");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate';

const params = new URLSearchParams({
  'notify': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate?notify=%@", encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate" ^ "?notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate"

params <- list(
  notify = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/activate")!
components.queryItems = [
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Activated Successfully" }

Possible Errors

USER_LIMIT_REACHED HTTP 403

RESOURCE_NOT_FOUND HTTP 404

ACTIVATE_ERROR HTTP 403

Deactivate User

Deactivate a specific user in a portal. Use this API to revoke a user's access to the portal without permanently removing their account.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'notify = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate";
params = Map();
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate")
params = {
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate"

params = {
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate?notify=%s", enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate";
        url += "?notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate" "?notify=" enc-notify)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate", nil)
    q := req.URL.Query()
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate?notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]/deactivate");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate';

const params = new URLSearchParams({
  'notify': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate?notify=%@", encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate" ^ "?notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate"

params <- list(
  notify = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]/deactivate")!
components.queryItems = [
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Deactivated Successfully" }

Possible Errors

CANT_UPDATE_UNCONFIRMED_USER HTTP 402

RESOURCE_NOT_FOUND HTTP 404

UNAUTHORIZED_ACCESS HTTP 401

DEACTIVATE_ERROR HTTP 403

Activate Client User

Activate a specific client user in a portal. Use this API to restore a deactivated client user's access to the 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'notify = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate";
params = Map();
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate")
params = {
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate"

params = {
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate?notify=%s", enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate";
        url += "?notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate" "?notify=" enc-notify)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate", nil)
    q := req.URL.Query()
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate?notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/client-users/[ZPUID | EMAILID]/activate");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate';

const params = new URLSearchParams({
  'notify': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate?notify=%@", encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate" ^ "?notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate"

params <- list(
  notify = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/activate")!
components.queryItems = [
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Activated Successfully" }

Possible Errors

CLIENTUSER_LIMIT_REACHED HTTP 403

RESOURCE_NOT_FOUND HTTP 404

Deactivate Client User

Deactivate a specific client user in a portal. Use this API to revoke a client user's access to the portal without permanently removing their account.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'notify = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate";
params = Map();
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate")
params = {
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate"

params = {
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate?notify=%s", enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate";
        url += "?notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate" "?notify=" enc-notify)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate", nil)
    q := req.URL.Query()
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate?notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/client-users/[ZPUID | EMAILID]/deactivate");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate';

const params = new URLSearchParams({
  'notify': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate?notify=%@", encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate" ^ "?notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate"

params <- list(
  notify = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/client-users/[ZPUID | EMAILID]/deactivate")!
components.queryItems = [
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

notify : "true"

Sample Response

200{ "response" : "User Deactivated Successfully" }

Possible Errors

CANT_UPDATE_UNCONFIRMED_USER HTTP 402

RESOURCE_NOT_FOUND HTTP 404

Delete User

Remove a specific user from a portal. Use this API to permanently revoke a user's access to a 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 about the removal. Accepted values: true or false

reporting_to

long

Enter the ZPUID of the reporting manager to reassign after the user is removed.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]?notify=true&reporting_to=8000000002411' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]";
params = Map();
params.put("notify", "true");
params.put("reporting_to", "8000000002411");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]');
url.searchParams.append('notify', 'true');
url.searchParams.append('reporting_to', '8000000002411');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]")
params = {
  "notify" => "true",
  "reporting_to" => "8000000002411"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'notify' => 'true',
    'reporting_to' => '8000000002411',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"

params = {
    "notify": "true",
    "reporting_to": "8000000002411"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char *enc_reporting_to = curl_easy_escape(curl, "8000000002411", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]?notify=%s&reporting_to=%s", enc_notify, enc_reporting_to);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_notify);
        curl_free(enc_reporting_to);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["notify"] = "true";
query["reporting_to"] = "8000000002411";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        char* enc_reporting_to = curl_easy_escape(curl, "8000000002411", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]";
        url += "?notify=" + std::string(enc_notify);
        url += "&reporting_to=" + std::string(enc_reporting_to);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_notify);
        curl_free(enc_reporting_to);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      enc-reporting_to (java.net.URLEncoder/encode "8000000002411" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" "?notify=" enc-notify "&reporting_to=" enc-reporting_to)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]", nil)
    q := req.URL.Query()
    q.Add("notify", "true")
    q.Add("reporting_to", "8000000002411")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]?notify=true&reporting_to=8000000002411 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]");
uriBuilder.addParameter("notify", "true");
uriBuilder.addParameter("reporting_to", "8000000002411");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]';

const params = new URLSearchParams({
  'notify': 'true',
  'reporting_to': '8000000002411'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
notify = "true"
reporting_to = "8000000002411"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("notify", "true")
    urlBuilder.addQueryParameter("reporting_to", "8000000002411")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedReporting_to = [@"8000000002411" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]?notify=%@&reporting_to=%@", encodedNotify, encodedReporting_to];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_notify = Uri.pct_encode "true" in
  let enc_reporting_to = Uri.pct_encode "8000000002411" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" ^ "?notify=" ^ enc_notify ^ "&reporting_to=" ^ enc_reporting_to) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    notify = "true"
    reporting_to = "8000000002411"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]"

params <- list(
  notify = "true",
  reporting_to = "8000000002411"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/[ZPUID | EMAILID]")!
components.queryItems = [
    URLQueryItem(name: "notify", value: "true"),
    URLQueryItem(name: "reporting_to", value: "8000000002411")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

notify : "true" reporting_to : "8000000002411"

Sample Response

204 No Content{ }

Possible Errors

CANT_UPDATE_UNCONFIRMED_USER HTTP 402

RESOURCE_NOT_FOUND HTTP 404

UNAUTHORIZED_ACCESS HTTP 401

ERROR_WHILE_DELETE HTTP 403

ERROR_WHILE_DELETE_ADDED_VIA_TEAM HTTP 403

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 Project Users

Retrieve all users in a specific project. Use this API to access the complete list of users and their details within 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 to filter the results. Accepted values: 1 (Users), 2 (Client Users), 3 (Client Contacts), 6 (Resources)

view_type

String

Enter the view type to filter users by status. Accepted values: 0 (Inactive), 1 (Active)

sort

String

Enter the sort criteria for the results. Example: last_accessed_time:desc. Accepted values: alphabetical, last_accessed_time, role, profile, added_time with 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 to narrow down the user results.

ids

String

Enter the IDs of the users to retrieve.

company_ids

String

Enter the IDs of the client companies to filter the users.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users?type=1&view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=23806000006417155&company_ids=170876000003941041' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users";
params = Map();
params.put("type", "1");
params.put("view_type", "1");
params.put("sort", "alphabetical:asc");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"});
params.put("ids", "23806000006417155");
params.put("company_ids", "170876000003941041");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users');
url.searchParams.append('type', '1');
url.searchParams.append('view_type', '1');
url.searchParams.append('sort', 'alphabetical:asc');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}');
url.searchParams.append('ids', '23806000006417155');
url.searchParams.append('company_ids', '170876000003941041');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users")
params = {
  "type" => "1",
  "view_type" => "1",
  "sort" => "alphabetical:asc",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  "ids" => "23806000006417155",
  "company_ids" => "170876000003941041"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'type' => '1',
    'view_type' => '1',
    'sort' => 'alphabetical:asc',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
    'ids' => '23806000006417155',
    'company_ids' => '170876000003941041',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users"

params = {
    "type": "1",
    "view_type": "1",
    "sort": "alphabetical:asc",
    "page": "1",
    "per_page": "10",
    ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
    "ids": "23806000006417155",
    "company_ids": "170876000003941041"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_type = curl_easy_escape(curl, "1", 0);
        char *enc_view_type = curl_easy_escape(curl, "1", 0);
        char *enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_ids = curl_easy_escape(curl, "23806000006417155", 0);
        char *enc_company_ids = curl_easy_escape(curl, "170876000003941041", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users?type=%s&view_type=%s&sort=%s&page=%s&per_page=%s&\"filter\"=%s&ids=%s&company_ids=%s", enc_type, enc_view_type, enc_sort, enc_page, enc_per_page, enc_"filter", enc_ids, enc_company_ids);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_type);
        curl_free(enc_view_type);
        curl_free(enc_sort);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_free(enc_company_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["type"] = "1";
query["view_type"] = "1";
query["sort"] = "alphabetical:asc";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
query["ids"] = "23806000006417155";
query["company_ids"] = "170876000003941041";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_type = curl_easy_escape(curl, "1", 0);
        char* enc_view_type = curl_easy_escape(curl, "1", 0);
        char* enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_ids = curl_easy_escape(curl, "23806000006417155", 0);
        char* enc_company_ids = curl_easy_escape(curl, "170876000003941041", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users";
        url += "?type=" + std::string(enc_type);
        url += "&view_type=" + std::string(enc_view_type);
        url += "&sort=" + std::string(enc_sort);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&ids=" + std::string(enc_ids);
        url += "&company_ids=" + std::string(enc_company_ids);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_type);
        curl_free(enc_view_type);
        curl_free(enc_sort);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_free(enc_company_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "1" "UTF-8")
      enc-view_type (java.net.URLEncoder/encode "1" "UTF-8")
      enc-sort (java.net.URLEncoder/encode "alphabetical:asc" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-ids (java.net.URLEncoder/encode "23806000006417155" "UTF-8")
      enc-company_ids (java.net.URLEncoder/encode "170876000003941041" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users" "?type=" enc-type "&view_type=" enc-view_type "&sort=" enc-sort "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&ids=" enc-ids "&company_ids=" enc-company_ids)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users", nil)
    q := req.URL.Query()
    q.Add("type", "1")
    q.Add("view_type", "1")
    q.Add("sort", "alphabetical:asc")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("ids", "23806000006417155")
    q.Add("company_ids", "170876000003941041")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users?type=1&view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=23806000006417155&company_ids=170876000003941041 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("type", "1");
uriBuilder.addParameter("view_type", "1");
uriBuilder.addParameter("sort", "alphabetical:asc");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("ids", "23806000006417155");
uriBuilder.addParameter("company_ids", "170876000003941041");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users';

const params = new URLSearchParams({
  'type': '1',
  'view_type': '1',
  'sort': 'alphabetical:asc',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
  'ids': '23806000006417155',
  'company_ids': '170876000003941041'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
type = "1"
view_type = "1"
sort = "alphabetical:asc"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}
ids = "23806000006417155"
company_ids = "170876000003941041"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "1")
    urlBuilder.addQueryParameter("view_type", "1")
    urlBuilder.addQueryParameter("sort", "alphabetical:asc")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("ids", "23806000006417155")
    urlBuilder.addQueryParameter("company_ids", "170876000003941041")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedType = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedView_type = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort = [@"alphabetical:asc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIds = [@"23806000006417155" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedCompany_ids = [@"170876000003941041" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users?type=%@&view_type=%@&sort=%@&page=%@&per_page=%@&"filter"=%@&ids=%@&company_ids=%@", encodedType, encodedView_type, encodedSort, encodedPage, encodedPer_page, encoded"filter", encodedIds, encodedCompany_ids];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_type = Uri.pct_encode "1" in
  let enc_view_type = Uri.pct_encode "1" in
  let enc_sort = Uri.pct_encode "alphabetical:asc" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_ids = Uri.pct_encode "23806000006417155" in
  let enc_company_ids = Uri.pct_encode "170876000003941041" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users" ^ "?type=" ^ enc_type ^ "&view_type=" ^ enc_view_type ^ "&sort=" ^ enc_sort ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&ids=" ^ enc_ids ^ "&company_ids=" ^ enc_company_ids) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    type = "1"
    view_type = "1"
    sort = "alphabetical:asc"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"-`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"-`",`"unit`":`"-`",`"prior`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
    ids = "23806000006417155"
    company_ids = "170876000003941041"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users"

params <- list(
  type = "1",
  view_type = "1",
  sort = "alphabetical:asc",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  ids = "23806000006417155",
  company_ids = "170876000003941041"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users")!
components.queryItems = [
    URLQueryItem(name: "type", value: "1"),
    URLQueryItem(name: "view_type", value: "1"),
    URLQueryItem(name: "sort", value: "alphabetical:asc"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "ids", value: "23806000006417155"),
    URLQueryItem(name: "company_ids", value: "170876000003941041")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

type : "1" view_type : "1" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "offset" : "-", "unit" : "-", "prior" : "-" } ] } ], "pattern" : "1 AND 2" } ids : "23806000006417155" company_ids : "170876000003941041"

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" } } ] }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Get Project User Details

Retrieve the details of a specific user in a project. Use this API to access the full profile and information of a user within a project.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" } }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

Add Project User

Add a user to a specific project. Use this API to grant a portal user access to a project.

POST

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

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

Enter the details of the users to add to the project.

notify

boolean

Specify whether to send a notification to the added users. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form '"userdetails" = [{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00"}]' --form 'notify = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers";
params = Map();
params.put("userdetails", [{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00"}]);
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers');
url.searchParams.append('"userdetails"', '[{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00"}]');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers")
params = {
  ""userdetails"" => "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]",
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    '"userdetails"' => '[{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00"}]',
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers"

params = {
    ""userdetails"": "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]",
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]", 0);
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers?\"userdetails\"=%s&notify=%s", enc_"userdetails", enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_"userdetails");
        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query[""userdetails""] = "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]";
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]", 0);
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers";
        url += "?"userdetails"=" + std::string(enc_"userdetails");
        url += "&notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_"userdetails");
        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"userdetails" (java.net.URLEncoder/encode "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]" "UTF-8")
      enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers" "?"userdetails"=" enc-"userdetails" "&notify=" enc-notify)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers", nil)
    q := req.URL.Query()
    q.Add(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]")
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers?%22userdetails%22=%5B%7B%22email_id%22%3A%22mark%40zylker.com%22%2C%22profile_id%22%3A%222223806000000022149%22%2C%22role_id%22%3A%228000000000991%22%2C%22rate%22%3A%2255.00%22%2C%22cost_rate_per_hour%22%3A%22-%22%2C%22revenue_budget%22%3A%2214.00%22%2C%22cost_budget%22%3A%2220.00%22%2C%22budget_threshold%22%3A%2210.00%22%7D%5D&notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/projectusers");
uriBuilder.addParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers';

const params = new URLSearchParams({
  '"userdetails"': '[{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00"}]',
  'notify': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
"userdetails" = [{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00"}]
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]")
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encoded"userdetails" = [@"[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers?"userdetails"=%@&notify=%@", encoded"userdetails", encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_"userdetails" = Uri.pct_encode "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]" in
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers" ^ "?"userdetails"=" ^ enc_"userdetails" ^ "&notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    "userdetails" = "[{`"email_id`":`"mark@zylker.com`",`"profile_id`":`"2223806000000022149`",`"role_id`":`"8000000000991`",`"rate`":`"55.00`",`"cost_rate_per_hour`":`"-`",`"revenue_budget`":`"14.00`",`"cost_budget`":`"20.00`",`"budget_threshold`":`"10.00`"}]"
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers"

params <- list(
  "userdetails" = "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]",
  notify = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/projectusers")!
components.queryItems = [
    URLQueryItem(name: ""userdetails"", value: "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\"}]"),
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

"userdetails" : [ { "email_id" : "mark@zylker.com", "profile_id" : "2223806000000022149", "role_id" : "8000000000991", "rate" : "55.00", "cost_rate_per_hour" : "-", "revenue_budget" : "14.00", "cost_budget" : "20.00", "budget_threshold" : "10.00" } ] 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\"" ] }

Possible Errors

USER_ALREADY_ADDED_IN_PROJECT HTTP 403

RESOURCE_NOT_FOUND HTTP 404

UNAUTHORIZED_ACCESS HTTP 401

Add Project Client User

Add a client user to a specific project. Use this API to grant a client user access to a project.

POST

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

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
userdetails

JSONArray

Enter the details of the client users to add to the project.

notify

boolean

Specify whether to send a notification to the added client users. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form '"userdetails" = [{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":"-"}]' --form 'notify = "true"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser";
params = Map();
params.put("userdetails", [{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":"-"}]);
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser');
url.searchParams.append('"userdetails"', '[{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":"-"}]');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser")
params = {
  ""userdetails"" => "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]",
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    '"userdetails"' => '[{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":"-"}]',
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser"

params = {
    ""userdetails"": "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]",
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]", 0);
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser?\"userdetails\"=%s&notify=%s", enc_"userdetails", enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_"userdetails");
        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query[""userdetails""] = "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]";
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_"userdetails" = curl_easy_escape(curl, "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]", 0);
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser";
        url += "?"userdetails"=" + std::string(enc_"userdetails");
        url += "&notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_"userdetails");
        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-"userdetails" (java.net.URLEncoder/encode "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]" "UTF-8")
      enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser" "?"userdetails"=" enc-"userdetails" "&notify=" enc-notify)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser", nil)
    q := req.URL.Query()
    q.Add(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]")
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser?%22userdetails%22=%5B%7B%22email_id%22%3A%22mark%40zylker.com%22%2C%22profile_id%22%3A%222223806000000022149%22%2C%22role_id%22%3A%228000000000991%22%2C%22rate%22%3A%2255.00%22%2C%22cost_rate_per_hour%22%3A%22-%22%2C%22revenue_budget%22%3A%2214.00%22%2C%22cost_budget%22%3A%2220.00%22%2C%22budget_threshold%22%3A%2210.00%22%2C%22is_readonly%22%3A%22-%22%7D%5D&notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/clientuser");
uriBuilder.addParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser';

const params = new URLSearchParams({
  '"userdetails"': '[{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":"-"}]',
  'notify': 'true'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
"userdetails" = [{"email_id":"mark@zylker.com","profile_id":"2223806000000022149","role_id":"8000000000991","rate":"55.00","cost_rate_per_hour":"-","revenue_budget":"14.00","cost_budget":"20.00","budget_threshold":"10.00","is_readonly":"-"}]
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter(""userdetails"", "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]")
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encoded"userdetails" = [@"[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser?"userdetails"=%@&notify=%@", encoded"userdetails", encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_"userdetails" = Uri.pct_encode "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]" in
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser" ^ "?"userdetails"=" ^ enc_"userdetails" ^ "&notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    "userdetails" = "[{`"email_id`":`"mark@zylker.com`",`"profile_id`":`"2223806000000022149`",`"role_id`":`"8000000000991`",`"rate`":`"55.00`",`"cost_rate_per_hour`":`"-`",`"revenue_budget`":`"14.00`",`"cost_budget`":`"20.00`",`"budget_threshold`":`"10.00`",`"is_readonly`":`"-`"}]"
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser"

params <- list(
  "userdetails" = "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]",
  notify = "true"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clientuser")!
components.queryItems = [
    URLQueryItem(name: ""userdetails"", value: "[{\"email_id\":\"mark@zylker.com\",\"profile_id\":\"2223806000000022149\",\"role_id\":\"8000000000991\",\"rate\":\"55.00\",\"cost_rate_per_hour\":\"-\",\"revenue_budget\":\"14.00\",\"cost_budget\":\"20.00\",\"budget_threshold\":\"10.00\",\"is_readonly\":\"-\"}]"),
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

"userdetails" : [ { "email_id" : "mark@zylker.com", "profile_id" : "2223806000000022149", "role_id" : "8000000000991", "rate" : "55.00", "cost_rate_per_hour" : "-", "revenue_budget" : "14.00", "cost_budget" : "20.00", "budget_threshold" : "10.00", "is_readonly" : "-" } ] notify : "true"

Sample Response

201{ "is_upgrade" : "false", "emailvszpuid" : { "monica.hemsworth@zylker.com" : "8000000002411" }, "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" : 8000000048925, "loginname" : "0", "active" : 1, "is_resend_invite" : false, "role_name" : "Client", "profile_name" : "client", "zpuid" : "8000000002411", "last_updated_time" : 0, "role_id" : "8000000048013", "profile_id" : "8000000079017", "company_name" : "Zylker", "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" : "8000000005863", "is_admin" : "true", "is_invoice_integ" : "true", "is_crmplus_plus" : "false", "user_count" : { "Contractor" : "1", "jointadmin" : "1", "admin" : "1", "portalusers" : "10", "Employee" : "6", "Manager" : "1" }, "existing_Users" : [ { "emailId" : "monica.hemsworth@zylker.com" } ], "success_zpuid" : [ "\"8000000002411\"" ] }

Possible Errors

CLIENT_ALREADY_EXISTS_IN_PROJECT HTTP 403

CLIENTUSER_ALREADY_ADDED_IN_PROJECT HTTP 403

Update Project User Details

Modify the details of a specific user in a project. Use this API to modify a user's details within a project using their ZPUID, ZUID, or email address.

POST

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ZPUID | EMAILID]

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
invoice

String

Enter the invoice rate per hour for the user. Example: $30 per hour

costrate

String

Enter the cost per hour for the user. Example: $15 per hour

profile_id

long

Enter the ID of the profile to assign to the user.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
--form 'invoice = "30.00"' --form 'costrate = "15.00"' --form 'profile_id = "2223806000000022149"'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]";
params = Map();
params.put("invoice", "30.00");
params.put("costrate", "15.00");
params.put("profile_id", "2223806000000022149");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]');
url.searchParams.append('invoice', '30.00');
url.searchParams.append('costrate', '15.00');
url.searchParams.append('profile_id', '2223806000000022149');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]")
params = {
  "invoice" => "30.00",
  "costrate" => "15.00",
  "profile_id" => "2223806000000022149"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'invoice' => '30.00',
    'costrate' => '15.00',
    'profile_id' => '2223806000000022149',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"

params = {
    "invoice": "30.00",
    "costrate": "15.00",
    "profile_id": "2223806000000022149"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_invoice = curl_easy_escape(curl, "30.00", 0);
        char *enc_costrate = curl_easy_escape(curl, "15.00", 0);
        char *enc_profile_id = curl_easy_escape(curl, "2223806000000022149", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]?invoice=%s&costrate=%s&profile_id=%s", enc_invoice, enc_costrate, enc_profile_id);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_invoice);
        curl_free(enc_costrate);
        curl_free(enc_profile_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["invoice"] = "30.00";
query["costrate"] = "15.00";
query["profile_id"] = "2223806000000022149";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_invoice = curl_easy_escape(curl, "30.00", 0);
        char* enc_costrate = curl_easy_escape(curl, "15.00", 0);
        char* enc_profile_id = curl_easy_escape(curl, "2223806000000022149", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]";
        url += "?invoice=" + std::string(enc_invoice);
        url += "&costrate=" + std::string(enc_costrate);
        url += "&profile_id=" + std::string(enc_profile_id);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_invoice);
        curl_free(enc_costrate);
        curl_free(enc_profile_id);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-invoice (java.net.URLEncoder/encode "30.00" "UTF-8")
      enc-costrate (java.net.URLEncoder/encode "15.00" "UTF-8")
      enc-profile_id (java.net.URLEncoder/encode "2223806000000022149" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" "?invoice=" enc-invoice "&costrate=" enc-costrate "&profile_id=" enc-profile_id)]
(def response
  (client/post url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]", nil)
    q := req.URL.Query()
    q.Add("invoice", "30.00")
    q.Add("costrate", "15.00")
    q.Add("profile_id", "2223806000000022149")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]?invoice=30.00&costrate=15.00&profile_id=2223806000000022149 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]");
uriBuilder.addParameter("invoice", "30.00");
uriBuilder.addParameter("costrate", "15.00");
uriBuilder.addParameter("profile_id", "2223806000000022149");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]';

const params = new URLSearchParams({
  'invoice': '30.00',
  'costrate': '15.00',
  'profile_id': '2223806000000022149'
});

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
invoice = "30.00"
costrate = "15.00"
profile_id = "2223806000000022149"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("invoice", "30.00")
    urlBuilder.addQueryParameter("costrate", "15.00")
    urlBuilder.addQueryParameter("profile_id", "2223806000000022149")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedInvoice = [@"30.00" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedCostrate = [@"15.00" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedProfile_id = [@"2223806000000022149" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]?invoice=%@&costrate=%@&profile_id=%@", encodedInvoice, encodedCostrate, encodedProfile_id];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_invoice = Uri.pct_encode "30.00" in
  let enc_costrate = Uri.pct_encode "15.00" in
  let enc_profile_id = Uri.pct_encode "2223806000000022149" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" ^ "?invoice=" ^ enc_invoice ^ "&costrate=" ^ enc_costrate ^ "&profile_id=" ^ enc_profile_id) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    invoice = "30.00"
    costrate = "15.00"
    profile_id = "2223806000000022149"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"

params <- list(
  invoice = "30.00",
  costrate = "15.00",
  profile_id = "2223806000000022149"
)

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]")!
components.queryItems = [
    URLQueryItem(name: "invoice", value: "30.00"),
    URLQueryItem(name: "costrate", value: "15.00"),
    URLQueryItem(name: "profile_id", value: "2223806000000022149")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

invoice : "30.00" costrate : "15.00" profile_id : "2223806000000022149"

Sample Response

200{ "CURR_PROJID" : "4000000008005", "PROJOWNER" : "4000000002961", "ISOFFICEUSER" : false, "CURR_USERZUID" : "46155707", "CURR_USERZPUID" : "4000000002961", "USERLIST" : [ { "ISRESENDINVITE" : true, "PROFILE_ID" : "4000000003464", "DISPLAYNAME" : "Elle Jason", "business_hours" : { "name" : "Standard Business Hours", "id" : 4000000006095 }, "ZPUID" : "4000000016001", "COST_EFFECTIVE_DATE" : "12-18-2025", "ISGROUPUSER" : false, "INVOICE" : "55.00", "EMAIL" : "elle.jason@zylker.com", "ISACTIVE" : true, "ZPRole" : "Employee", "COST_PER_HOUR" : "22.00", "PROFILE_NAME" : "Employee", "last_updated_time" : 1766039954490, "role_id" : "4000000002967", "USER_BUDGET" : "0.000", "ISUSERCLOSED" : false, "ISFOLLWING" : false, "PROFILETYPE" : 7, "LOGINNAME" : 16027110, "REVENUE_BUDGET" : 0 } ], "ACTIVEUSERCOUNT" : 2, "ISINVINTEG" : false, "INACTIVEUSERCOUNT" : 0, "ISPORTALOWNER" : true, "PROJSTAT" : "active", "ISADMIN" : true, "USERCNT" : { "Employee" : 1, "projusers" : 2, "Client" : 0, "Portal Owner" : 1 }, "CURR_ROLE" : "admin", "ISUPGRADE" : false, "ISCRMPLUSPORTAL" : false, "ISDEMOUSER" : false }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

UNAUTHORIZED_ACCESS HTTP 401

Delete Project User

Remove a specific user from a project. Use this API to revoke a user's access to a project within a portal.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]?notify=true' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]";
params = Map();
params.put("notify", "true");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]');
url.searchParams.append('notify', 'true');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]")
params = {
  "notify" => "true"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'notify' => 'true',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"

params = {
    "notify": "true"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_notify = curl_easy_escape(curl, "true", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]?notify=%s", enc_notify);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["notify"] = "true";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_notify = curl_easy_escape(curl, "true", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]";
        url += "?notify=" + std::string(enc_notify);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_notify);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" "?notify=" enc-notify)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]", nil)
    q := req.URL.Query()
    q.Add("notify", "true")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]?notify=true HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]");
uriBuilder.addParameter("notify", "true");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]';

const params = new URLSearchParams({
  'notify': 'true'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
notify = "true"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("notify", "true")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]?notify=%@", encodedNotify];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_notify = Uri.pct_encode "true" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" ^ "?notify=" ^ enc_notify) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    notify = "true"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]"

params <- list(
  notify = "true"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]")!
components.queryItems = [
    URLQueryItem(name: "notify", value: "true")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

notify : "true"

Sample Response

204 No Content{ }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

CANNOT_REMOVE_CRM_ASSOCIATED_USER HTTP 403

CANNOT_REMOVE_PROJECTOWNER_FROM_PROJECT HTTP 403

ERROR_WHILE_DELETE_ADDED_VIA_TEAM HTTP 403

CANNOT_REMOVE_ADMIN_FROM_PROJECT HTTP 403

User Hierarchy

Use this API to retrieve the reportees of a user within Zoho Projects.

Get Subordinates of a User

Retrieve all subordinates of a specific user in a portal. Use this API to access the list of users who report to a particular user within the portal hierarchy.

GET

/api/v3/portal/[PORTALID]/user/[USERID]/descendants

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
index

int

Enter the starting index of the records to retrieve.

range

int

Enter the number of records to retrieve.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants?index=1&range=100' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants";
params = Map();
params.put("index", "1");
params.put("range", "100");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants');
url.searchParams.append('index', '1');
url.searchParams.append('range', '100');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants")
params = {
  "index" => "1",
  "range" => "100"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'index' => '1',
    'range' => '100',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants"

params = {
    "index": "1",
    "range": "100"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_index = curl_easy_escape(curl, "1", 0);
        char *enc_range = curl_easy_escape(curl, "100", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants?index=%s&range=%s", enc_index, enc_range);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_index);
        curl_free(enc_range);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["index"] = "1";
query["range"] = "100";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_index = curl_easy_escape(curl, "1", 0);
        char* enc_range = curl_easy_escape(curl, "100", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants";
        url += "?index=" + std::string(enc_index);
        url += "&range=" + std::string(enc_range);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_index);
        curl_free(enc_range);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-index (java.net.URLEncoder/encode "1" "UTF-8")
      enc-range (java.net.URLEncoder/encode "100" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants" "?index=" enc-index "&range=" enc-range)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants", nil)
    q := req.URL.Query()
    q.Add("index", "1")
    q.Add("range", "100")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants?index=1&range=100 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("index", "1");
uriBuilder.addParameter("range", "100");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants';

const params = new URLSearchParams({
  'index': '1',
  'range': '100'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
index = "1"
range = "100"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("index", "1")
    urlBuilder.addQueryParameter("range", "100")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedIndex = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedRange = [@"100" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants?index=%@&range=%@", encodedIndex, encodedRange];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_index = Uri.pct_encode "1" in
  let enc_range = Uri.pct_encode "100" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants" ^ "?index=" ^ enc_index ^ "&range=" ^ enc_range) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    index = "1"
    range = "100"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants"

params <- list(
  index = "1",
  range = "100"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/user/[USERID]/descendants")!
components.queryItems = [
    URLQueryItem(name: "index", value: "1"),
    URLQueryItem(name: "range", value: "100")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" : "Hemsworth", "profile_image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=18891770", "display_name" : "Monica", "first_name" : "Monica", "email" : "monica.hemsworth@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" : "Jason", "profile_image_url" : "https://contacts.zoho.com/file?fs=thumb&exp=600&ID=16194581", "display_name" : "Elle", "first_name" : "Elle", "email" : "elle.jason@zylker.com", "zuid" : "16194581" }, "total_reports" : 0, "direct_reports" : 0, "level" : 2 } ] }

Possible Errors

USER_NOT_FOUND HTTP 404

UNAUTHORIZED_ACCESS HTTP 401

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 the details of a specific portal user export using its export ID. Use this API to access the status and download link of a previously initiated export.

GET

/api/v3/portal/[PORTALID]/users/export/[EXPORTID]

OAuth Scope:

ZohoProjects.users.READ, ZohoFiles.files.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export/[EXPORTID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "id" : "4000000443007", "created_time" : "2024-12-24T09:40:21.974Z", "exported_by" : { "id" : "4000000002143", "first_name" : "Monica", "last_name" : "Hemsworth", "full_name" : "Monica Hemsworth", "email" : "monica.hemsworth@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" }

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

Get Project User Export Details by Export ID

Retrieve the details of a specific project user export using its export ID. Use this API to access the status and download link of a previously initiated export.

GET

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/export/[EXPORTID]

OAuth Scope:

ZohoProjects.users.READ, ZohoFiles.files.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export/[EXPORTID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "created_time" : "2024-08-21T09:56:48.810Z", "exported_by" : { "full_name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "8000000002411", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "zuid" : "24925026" }, "format" : "xlsx", "download_url" : "https://projectsapi.zoho.com/portal/download/zylker/downloadaction.do?file=projects-283ca486b5bfaac931fc8747339313a23c848da625b276a86a31f9a844a7f710f283228ade05655188f9f569b6002ae8", "sheet_url" : "https://projectsapi.zoho.com/portal/download/zylker/viewonline.do?file=projects-283ca486b5bfaac931fc8747339313a23c848da625b276a86a31f9a844a7f710f283228ade05655188f9f569b6002ae8", "project" : { "number" : "14", "name" : "Software Development", "id" : "8000000005863" }, "id" : "8000000094011", "type" : "project_allclients", "status" : "completed" }
Get Portal User Export History

Retrieve the export history of portal users from the past 15 days. Use this API to access the list of previously exported user data within a portal.

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 to retrieve the corresponding export history. 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/export?type=project_users&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export";
params = Map();
params.put("type", "project_users");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/export');
url.searchParams.append('type', 'project_users');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/export")
params = {
  "type" => "project_users",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'type' => 'project_users',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export"

params = {
    "type": "project_users",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_type = curl_easy_escape(curl, "project_users", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export?type=%s&page=%s&per_page=%s", enc_type, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_type);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["type"] = "project_users";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/export") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_type = curl_easy_escape(curl, "project_users", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export";
        url += "?type=" + std::string(enc_type);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_type);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "project_users" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export" "?type=" enc-type "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export", nil)
    q := req.URL.Query()
    q.Add("type", "project_users")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/export?type=project_users&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("type", "project_users");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/export';

const params = new URLSearchParams({
  'type': 'project_users',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
type = "project_users"
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "project_users")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedType = [@"project_users" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/export?type=%@&page=%@&per_page=%@", encodedType, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_type = Uri.pct_encode "project_users" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/export" ^ "?type=" ^ enc_type ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    type = "project_users"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export"

params <- list(
  type = "project_users",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export")!
components.queryItems = [
    URLQueryItem(name: "type", value: "project_users"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

type : "project_users" page : "1" per_page : "10"

Sample Response

200{ "exports" : [ { "created_time" : "2024-08-21T09:56:48.810Z", "exported_by" : { "full_name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "8000000002411", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "zuid" : "24925026" }, "format" : "xlsx", "id" : "8000000086001", "type" : "all_project_users", "status" : "completed" } ], "page_info" : { "per_page" : 25, "has_next_page" : false, "count" : 1, "page" : 1 } }

Possible Errors

INVALID_PARAMETER_VALUE HTTP 400

Get Project User Export History

Retrieve the export history of project users from the past 15 days. Use this API to access the list of previously exported user data within a project.

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export?type=project_users&page=1&per_page=10' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export";
params = Map();
params.put("type", "project_users");
params.put("page", "1");
params.put("per_page", "10");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export');
url.searchParams.append('type', 'project_users');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export")
params = {
  "type" => "project_users",
  "page" => "1",
  "per_page" => "10"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'type' => 'project_users',
    'page' => '1',
    'per_page' => '10',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export"

params = {
    "type": "project_users",
    "page": "1",
    "per_page": "10"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_type = curl_easy_escape(curl, "project_users", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export?type=%s&page=%s&per_page=%s", enc_type, enc_page, enc_per_page);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_type);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["type"] = "project_users";
query["page"] = "1";
query["per_page"] = "10";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_type = curl_easy_escape(curl, "project_users", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export";
        url += "?type=" + std::string(enc_type);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_type);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-type (java.net.URLEncoder/encode "project_users" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export" "?type=" enc-type "&page=" enc-page "&per_page=" enc-per_page)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export", nil)
    q := req.URL.Query()
    q.Add("type", "project_users")
    q.Add("page", "1")
    q.Add("per_page", "10")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export?type=project_users&page=1&per_page=10 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("type", "project_users");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export';

const params = new URLSearchParams({
  'type': 'project_users',
  'page': '1',
  'per_page': '10'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
type = "project_users"
page = "1"
per_page = "10"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("type", "project_users")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedType = [@"project_users" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export?type=%@&page=%@&per_page=%@", encodedType, encodedPage, encodedPer_page];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_type = Uri.pct_encode "project_users" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export" ^ "?type=" ^ enc_type ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    type = "project_users"
    page = "1"
    per_page = "10"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export"

params <- list(
  type = "project_users",
  page = "1",
  per_page = "10"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export")!
components.queryItems = [
    URLQueryItem(name: "type", value: "project_users"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

type : "project_users" page : "1" per_page : "10"

Sample Response

200{ "exports" : [ { "created_time" : "2024-08-21T09:56:48.810Z", "exported_by" : { "full_name" : "Monica Hemsworth", "last_name" : "Hemsworth", "id" : "8000000002411", "first_name" : "Monica", "email" : "monica.hemsworth@zylker.com", "zuid" : "24925026" }, "format" : "csv", "project" : { "number" : "14", "name" : "Software Development", "id" : "8000000005863" }, "id" : "8000000088001", "type" : "project_users", "status" : "completed" } ], "page_info" : { "per_page" : 25, "has_next_page" : false, "count" : 1, "page" : 1 } }
Export Portal Users

Export the portal users from the Zoho Projects portal. Use this API to generate a downloadable file of portal user data.

POST

/api/v3/portal/[PORTALID]/users/export

OAuth Scope:

ZohoProjects.users.READ

Parameter

Param Name
Data Type
Description
type

String

required

Enter the type of users to export. 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 for the export. Accepted values: csv, xlsx

access_code

String

Enter the encryption password to protect the exported file.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/export' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"type":"project_users","format":"xlsx","access_code":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export";
params = Map();
params.put("type", "project_users");
params.put("format", "xlsx");
params.put("access_code", "-");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/export');

const payload = JSON.stringify({"type":"project_users","format":"xlsx","access_code":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/export")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"type":"project_users","format":"xlsx","access_code":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"type":"project_users","format":"xlsx","access_code":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"type":"project_users","format":"xlsx","access_code":"-"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export");
request.Content = new StringContent(
    @"{""type"":""project_users"",""format"":""xlsx"",""access_code"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/users/export HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"type":"project_users","format":"xlsx","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/export';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"type":"project_users","format":"xlsx","access_code":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"type":"project_users","format":"xlsx","access_code":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/export")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"type":"project_users","format":"xlsx","access_code":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/export"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"type":"project_users","format":"xlsx","access_code":"-"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"type":"project_users","format":"xlsx","access_code":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/export")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"type":"project_users","format":"xlsx","access_code":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "type" : "project_users", "format" : "xlsx", "access_code" : "-" }

Sample Response

202{ "id" : "7000044378571", "message" : "Export initiated successfully", "status" : "inprogress" }

Possible Errors

ONLY_XLSX_SUPPORTED HTTP 400

EXISTING_EXPORT_RUNNING HTTP 409

INVALID_VALUE_NOT_ALLOWED HTTP 400

INVALID_PARAMETER_VALUE HTTP 400

Export Project Users

Export all users in a specific project. Use this API to generate a downloadable file of project user data.

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 type of users to export. Accepted values: project_users, project_clientusers, project_clients, project_contacts, project_allclients

format

String

required

Enter the file format for the export. Accepted values: csv, xlsx

access_code

String

Enter the encryption password to protect the exported file.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"type":"project_users","format":"xlsx","access_code":"-"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export";
params = Map();
params.put("type", "project_users");
params.put("format", "xlsx");
params.put("access_code", "-");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export');

const payload = JSON.stringify({"type":"project_users","format":"xlsx","access_code":"-"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"type":"project_users","format":"xlsx","access_code":"-"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"type":"project_users","format":"xlsx","access_code":"-"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"type":"project_users","format":"xlsx","access_code":"-"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export");
request.Content = new StringContent(
    @"{""type"":""project_users"",""format"":""xlsx"",""access_code"":""-""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"type":"project_users","format":"xlsx","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"type":"project_users","format":"xlsx","access_code":"-"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"type":"project_users","format":"xlsx","access_code":"-"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"type":"project_users","format":"xlsx","access_code":"-"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"type":"project_users","format":"xlsx","access_code":"-"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"type":"project_users","format":"xlsx","access_code":"-"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"type\":\"project_users\",\"format\":\"xlsx\",\"access_code\":\"-\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/export")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"type":"project_users","format":"xlsx","access_code":"-"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "type" : "project_users", "format" : "xlsx", "access_code" : "-" }

Sample Response

202{ "id" : "7000044378593", "message" : "Export initiated successfully", "status" : "inprogress" }

Possible Errors

EXISTING_EXPORT_RUNNING HTTP 409

INVALID_PARAMETER_VALUE HTTP 400

Users Invitation Templates

This module covers all operations related to user invitation templates. Use these APIs to retrieve, create, delete, and set invitation templates as the default one.

Get All Invitation Templates

Retrieve all invitation templates from a portal. Use this API to access the list of email templates available for inviting users to a portal.

GET

/api/v3/portal/[PORTALID]/users/email-templates

OAuth Scope:

ZohoProjects.users.READ

Query Parameter

Param Name
Data Type
Description
search_term

String

Enter a search term to filter the invitation templates.

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 for the results.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates?search_term=Monica&page=1&per_page=10&sort_by=ASC%28last_modified_time%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates";
params = Map();
params.put("search_term", "Monica");
params.put("page", "1");
params.put("per_page", "10");
params.put("sort_by", "ASC(last_modified_time)");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates');
url.searchParams.append('search_term', 'Monica');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates")
params = {
  "search_term" => "Monica",
  "page" => "1",
  "per_page" => "10",
  "sort_by" => "ASC(last_modified_time)"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'search_term' => 'Monica',
    'page' => '1',
    'per_page' => '10',
    'sort_by' => 'ASC(last_modified_time)',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates"

params = {
    "search_term": "Monica",
    "page": "1",
    "per_page": "10",
    "sort_by": "ASC(last_modified_time)"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_search_term = curl_easy_escape(curl, "Monica", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates?search_term=%s&page=%s&per_page=%s&sort_by=%s", enc_search_term, enc_page, enc_per_page, enc_sort_by);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["search_term"] = "Monica";
query["page"] = "1";
query["per_page"] = "10";
query["sort_by"] = "ASC(last_modified_time)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_search_term = curl_easy_escape(curl, "Monica", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates";
        url += "?search_term=" + std::string(enc_search_term);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&sort_by=" + std::string(enc_sort_by);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-search_term (java.net.URLEncoder/encode "Monica" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates" "?search_term=" enc-search_term "&page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates", nil)
    q := req.URL.Query()
    q.Add("search_term", "Monica")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("sort_by", "ASC(last_modified_time)")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates?search_term=Monica&page=1&per_page=10&sort_by=ASC%28last_modified_time%29 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/email-templates");
uriBuilder.addParameter("search_term", "Monica");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates';

const params = new URLSearchParams({
  'search_term': 'Monica',
  'page': '1',
  'per_page': '10',
  'sort_by': 'ASC(last_modified_time)'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
search_term = "Monica"
page = "1"
per_page = "10"
sort_by = "ASC(last_modified_time)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("search_term", "Monica")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedSearch_term = [@"Monica" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates?search_term=%@&page=%@&per_page=%@&sort_by=%@", encodedSearch_term, encodedPage, encodedPer_page, encodedSort_by];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_search_term = Uri.pct_encode "Monica" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates" ^ "?search_term=" ^ enc_search_term ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    search_term = "Monica"
    page = "1"
    per_page = "10"
    sort_by = "ASC(last_modified_time)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates"

params <- list(
  search_term = "Monica",
  page = "1",
  per_page = "10",
  sort_by = "ASC(last_modified_time)"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates")!
components.queryItems = [
    URLQueryItem(name: "search_term", value: "Monica"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

search_term : "Monica" page : "1" per_page : "10" sort_by : "ASC(last_modified_time)"

Sample Response

200{ "meta" : { "logo_url" : "https://contacts.zoho.com/file?ot=22&t=serviceorg&ID=30259490", "limit" : { "clients" : 20, "users" : 0 } }, "page_info" : { "per_page" : 50, "has_next_page" : false, "count" : 20, "page" : 1 }, "email_templates" : [ { "subject" : "Welcome to the Workspace", "name" : "Client Invite", "id" : "10000000034005", "module_name" : "Clients", "is_default" : false } ] }
Get Invitation Template

Retrieve the details of a specific invitation template in a portal. Use this API to access the content and configuration of an invitation email template.

GET

/api/v3/portal/[PORTALID]/users/email-templates/[EMAIL-TEMPLATEID]

OAuth Scope:

ZohoProjects.users.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/email-templates/[EMAIL-TEMPLATEID]");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

200{ "id" : "10000000034005", "name" : "Client Onboarding", "module_name" : "Clients", "subject" : "Welcome to Your Project Workspace", "content" : "Hello,\n\nWelcome to your project workspace. You have been invited to collaborate and get started with your tasks.\n\nClick the link below to access your workspace and begin.\n\nIf you have any questions, feel free to reach out.\n\nRegards,\nTeam", "is_default" : false }
Create Invitation Template

Create a new invitation template in the Zoho Projects portal. Use this API to define a custom email template for inviting users to a portal.

POST

/api/v3/portal/[PORTALID]/users/email-templates

OAuth Scope:

ZohoProjects.users.CREATE

Parameter

Param Name
Data Type
Description
is_default

boolean

default : false

Specify whether the invitation template is the default template. Accepted values: true or false

module_name

String

Enter the module name for the invitation template. Accepted values: Users, Clients

name

String

max length : 100

Enter the name of the invitation template.

subject

String

max length : 250

Enter the subject of the invitation email.

content

String

max length : 7500

Enter the content of the invitation email.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates";
params = Map();
params.put("is_default", false);
params.put("module_name", "Users");
params.put("name", "User Invitation");
params.put("subject", "Welcome to the Portal");
params.put("content", "Hello, you have been invited to join the project.");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates');

const payload = JSON.stringify({"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates");
request.Content = new StringContent(
    @"{""is_default"":false,""module_name"":""Users"",""name"":""User Invitation"",""subject"":""Welcome to the Portal"",""content"":""Hello, you have been invited to join the project.""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/email-templates");
HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "is_default" : false, "module_name" : "Users", "name" : "User Invitation", "subject" : "Welcome to the Portal", "content" : "Hello, you have been invited to join the project." }

Sample Response

200{ "id" : "10000000035005", "name" : "User Invitation", "module_name" : "Users", "subject" : "Welcome to the Portal", "is_default" : false }

Possible Errors

INVALID_TEMPLATE_SUBJECT HTTP 400

INVALID_TEMPLATE_CONTENT_INVITE_URL HTTP 400

INVALID_TEMPLATE_NAME HTTP 400

INVALID_TEMPLATE_CONTENT HTTP 400

DUPLICATE_TEMPLATE_NAME HTTP 400

USER_EMAIL_TEMPLATE_CREATION_LIMIT_REACHED HTTP 403

Update Invitation Template

Update a specific invitation template in a portal. Use this API to modify the content and configuration of an existing invitation email template.

PATCH

/api/v3/portal/[PORTALID]/users/email-templates/[EMAIL-TEMPLATEID]

OAuth Scope:

ZohoProjects.users.UPDATE

Parameter

Param Name
Data Type
Description
is_default

boolean

default : false

Specify whether the invitation template is the default template. Accepted values: true or false

module_name

String

Enter the module name for the invitation template. Accepted values: Users, Clients

name

String

max length : 100

Enter the updated name of the invitation template.

subject

String

max length : 250

Enter the updated subject of the invitation email.

content

String

max length : 7500

Enter the updated content of the invitation email.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]";
params = Map();
params.put("is_default", false);
params.put("module_name", "Users");
params.put("name", "User Invitation");
params.put("subject", "Welcome to the Portal");
params.put("content", "Hello, you have been invited to join the project.");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]');

const payload = JSON.stringify({"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");
request.Content = new StringContent(
    @"{""is_default"":false,""module_name"":""Users"",""name"":""User Invitation"",""subject"":""Welcome to the Portal"",""content"":""Hello, you have been invited to join the project.""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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/email-templates/[EMAIL-TEMPLATEID]");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"is_default\":false,\"module_name\":\"Users\",\"name\":\"User Invitation\",\"subject\":\"Welcome to the Portal\",\"content\":\"Hello, you have been invited to join the project.\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"is_default":false,"module_name":"Users","name":"User Invitation","subject":"Welcome to the Portal","content":"Hello, you have been invited to join the project."}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "is_default" : false, "module_name" : "Users", "name" : "User Invitation", "subject" : "Welcome to the Portal", "content" : "Hello, you have been invited to join the project." }

Sample Response

204 No Content

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

DUPLICATE_TEMPLATE_NAME HTTP 400

Set Default Invitation Template

Set a specific invitation template as the default template in the Zoho Projects portal.

PATCH

/api/v3/portal/[PORTALID]/users/email-templates/[EMAIL-TEMPLATEID]/make-default

OAuth Scope:

ZohoProjects.users.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default";
response = invokeUrl
[
    url: url
    type: PATCH
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.patch(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/email-templates/[EMAIL-TEMPLATEID]/make-default");
HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.patch ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default" -Method PATCH -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Remove Default Invitation Template

Remove the default status of a specific invitation template in a portal.

DELETE

/api/v3/portal/[PORTALID]/users/email-templates/[EMAIL-TEMPLATEID]/make-default

OAuth Scope:

ZohoProjects.users.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/email-templates/[EMAIL-TEMPLATEID]/make-default");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]/make-default")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Delete Invitation Template

Remove a specific invitation template from the Zoho Projects portal. Use this API to permanently remove an invitation email template from a portal.

DELETE

/api/v3/portal/[PORTALID]/users/email-templates/[EMAIL-TEMPLATEID]

OAuth Scope:

ZohoProjects.users.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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/email-templates/[EMAIL-TEMPLATEID]");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/email-templates/[EMAIL-TEMPLATEID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

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 all teams in a specific portal. Use this API to access the list of teams and their details within a portal.

GET

/api/v3/portal/[PORTALID]/teams

OAuth Scope:

ZohoProjects.teams.READ

Query Parameter

Param Name
Data Type
Description
id

long

Enter the ID of the team to retrieve.

search_term

String

Enter a search term to filter teams by 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 modified time to retrieve teams modified after this time.

sort_by

String

Enter the sort criteria for the results. 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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%3A59%3A21.188Z&sort_by=desc%28name%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams";
params = Map();
params.put("id", "4000000062001");
params.put("search_term", "Dev");
params.put("page", "1");
params.put("per_page", "10");
params.put("last_modified_time", "2023-11-30T05:59:21.188Z");
params.put("sort_by", "desc(name)");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/teams');
url.searchParams.append('id', '4000000062001');
url.searchParams.append('search_term', 'Dev');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('last_modified_time', '2023-11-30T05:59:21.188Z');
url.searchParams.append('sort_by', 'desc(name)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/teams")
params = {
  "id" => "4000000062001",
  "search_term" => "Dev",
  "page" => "1",
  "per_page" => "10",
  "last_modified_time" => "2023-11-30T05:59:21.188Z",
  "sort_by" => "desc(name)"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'id' => '4000000062001',
    'search_term' => 'Dev',
    'page' => '1',
    'per_page' => '10',
    'last_modified_time' => '2023-11-30T05:59:21.188Z',
    'sort_by' => 'desc(name)',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams"

params = {
    "id": "4000000062001",
    "search_term": "Dev",
    "page": "1",
    "per_page": "10",
    "last_modified_time": "2023-11-30T05:59:21.188Z",
    "sort_by": "desc(name)"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_id = curl_easy_escape(curl, "4000000062001", 0);
        char *enc_search_term = curl_easy_escape(curl, "Dev", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        char *enc_sort_by = curl_easy_escape(curl, "desc(name)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/teams?id=%s&search_term=%s&page=%s&per_page=%s&last_modified_time=%s&sort_by=%s", enc_id, enc_search_term, enc_page, enc_per_page, enc_last_modified_time, enc_sort_by);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_id);
        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["id"] = "4000000062001";
query["search_term"] = "Dev";
query["page"] = "1";
query["per_page"] = "10";
query["last_modified_time"] = "2023-11-30T05:59:21.188Z";
query["sort_by"] = "desc(name)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/teams") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_id = curl_easy_escape(curl, "4000000062001", 0);
        char* enc_search_term = curl_easy_escape(curl, "Dev", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        char* enc_sort_by = curl_easy_escape(curl, "desc(name)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams";
        url += "?id=" + std::string(enc_id);
        url += "&search_term=" + std::string(enc_search_term);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&last_modified_time=" + std::string(enc_last_modified_time);
        url += "&sort_by=" + std::string(enc_sort_by);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_id);
        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-id (java.net.URLEncoder/encode "4000000062001" "UTF-8")
      enc-search_term (java.net.URLEncoder/encode "Dev" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-last_modified_time (java.net.URLEncoder/encode "2023-11-30T05:59:21.188Z" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "desc(name)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/teams" "?id=" enc-id "&search_term=" enc-search_term "&page=" enc-page "&per_page=" enc-per_page "&last_modified_time=" enc-last_modified_time "&sort_by=" enc-sort_by)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/teams", nil)
    q := req.URL.Query()
    q.Add("id", "4000000062001")
    q.Add("search_term", "Dev")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("last_modified_time", "2023-11-30T05:59:21.188Z")
    q.Add("sort_by", "desc(name)")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
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%3A59%3A21.188Z&sort_by=desc%28name%29 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("id", "4000000062001");
uriBuilder.addParameter("search_term", "Dev");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("last_modified_time", "2023-11-30T05:59:21.188Z");
uriBuilder.addParameter("sort_by", "desc(name)");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/teams';

const params = new URLSearchParams({
  'id': '4000000062001',
  'search_term': 'Dev',
  'page': '1',
  'per_page': '10',
  'last_modified_time': '2023-11-30T05:59:21.188Z',
  'sort_by': 'desc(name)'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
id = "4000000062001"
search_term = "Dev"
page = "1"
per_page = "10"
last_modified_time = "2023-11-30T05:59:21.188Z"
sort_by = "desc(name)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("id", "4000000062001")
    urlBuilder.addQueryParameter("search_term", "Dev")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("last_modified_time", "2023-11-30T05:59:21.188Z")
    urlBuilder.addQueryParameter("sort_by", "desc(name)")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedId = [@"4000000062001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSearch_term = [@"Dev" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedLast_modified_time = [@"2023-11-30T05:59:21.188Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"desc(name)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/teams?id=%@&search_term=%@&page=%@&per_page=%@&last_modified_time=%@&sort_by=%@", encodedId, encodedSearch_term, encodedPage, encodedPer_page, encodedLast_modified_time, encodedSort_by];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_id = Uri.pct_encode "4000000062001" in
  let enc_search_term = Uri.pct_encode "Dev" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_last_modified_time = Uri.pct_encode "2023-11-30T05:59:21.188Z" in
  let enc_sort_by = Uri.pct_encode "desc(name)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/teams" ^ "?id=" ^ enc_id ^ "&search_term=" ^ enc_search_term ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&last_modified_time=" ^ enc_last_modified_time ^ "&sort_by=" ^ enc_sort_by) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    id = "4000000062001"
    search_term = "Dev"
    page = "1"
    per_page = "10"
    last_modified_time = "2023-11-30T05:59:21.188Z"
    sort_by = "desc(name)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/teams"

params <- list(
  id = "4000000062001",
  search_term = "Dev",
  page = "1",
  per_page = "10",
  last_modified_time = "2023-11-30T05:59:21.188Z",
  sort_by = "desc(name)"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/teams")!
components.queryItems = [
    URLQueryItem(name: "id", value: "4000000062001"),
    URLQueryItem(name: "search_term", value: "Dev"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "last_modified_time", value: "2023-11-30T05:59:21.188Z"),
    URLQueryItem(name: "sort_by", value: "desc(name)")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Team Users

Retrieve all users across teams in a specific portal. Use this API to access the list of users associated with teams within a portal.

GET

/api/v3/portal/[PORTALID]/teams/users

OAuth Scope:

ZohoProjects.teams.READ

Query Parameter

Param Name
Data Type
Description
team_ids

JSONArray

Enter the IDs of the teams to retrieve their associated users.

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 modified time to retrieve users modified after this 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users?team_ids=%5B4000000062001%2C4000000015029%5D&page=1&per_page=10&last_modified_time=2023-11-30T05%3A59%3A21.188Z' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users";
params = Map();
params.put("team_ids", "[4000000062001,4000000015029]");
params.put("page", "1");
params.put("per_page", "10");
params.put("last_modified_time", "2023-11-30T05:59:21.188Z");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users');
url.searchParams.append('team_ids', '[4000000062001,4000000015029]');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('last_modified_time', '2023-11-30T05:59:21.188Z');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users")
params = {
  "team_ids" => "[4000000062001,4000000015029]",
  "page" => "1",
  "per_page" => "10",
  "last_modified_time" => "2023-11-30T05:59:21.188Z"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'team_ids' => '[4000000062001,4000000015029]',
    'page' => '1',
    'per_page' => '10',
    'last_modified_time' => '2023-11-30T05:59:21.188Z',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users"

params = {
    "team_ids": "[4000000062001,4000000015029]",
    "page": "1",
    "per_page": "10",
    "last_modified_time": "2023-11-30T05:59:21.188Z"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_team_ids = curl_easy_escape(curl, "[4000000062001,4000000015029]", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users?team_ids=%s&page=%s&per_page=%s&last_modified_time=%s", enc_team_ids, enc_page, enc_per_page, enc_last_modified_time);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_team_ids);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["team_ids"] = "[4000000062001,4000000015029]";
query["page"] = "1";
query["per_page"] = "10";
query["last_modified_time"] = "2023-11-30T05:59:21.188Z";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_team_ids = curl_easy_escape(curl, "[4000000062001,4000000015029]", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users";
        url += "?team_ids=" + std::string(enc_team_ids);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&last_modified_time=" + std::string(enc_last_modified_time);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_team_ids);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-team_ids (java.net.URLEncoder/encode "[4000000062001,4000000015029]" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-last_modified_time (java.net.URLEncoder/encode "2023-11-30T05:59:21.188Z" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users" "?team_ids=" enc-team_ids "&page=" enc-page "&per_page=" enc-per_page "&last_modified_time=" enc-last_modified_time)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users", nil)
    q := req.URL.Query()
    q.Add("team_ids", "[4000000062001,4000000015029]")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("last_modified_time", "2023-11-30T05:59:21.188Z")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users?team_ids=%5B4000000062001%2C4000000015029%5D&page=1&per_page=10&last_modified_time=2023-11-30T05%3A59%3A21.188Z HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("team_ids", "[4000000062001,4000000015029]");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("last_modified_time", "2023-11-30T05:59:21.188Z");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users';

const params = new URLSearchParams({
  'team_ids': '[4000000062001,4000000015029]',
  'page': '1',
  'per_page': '10',
  'last_modified_time': '2023-11-30T05:59:21.188Z'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
team_ids = "[4000000062001,4000000015029]"
page = "1"
per_page = "10"
last_modified_time = "2023-11-30T05:59:21.188Z"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("team_ids", "[4000000062001,4000000015029]")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("last_modified_time", "2023-11-30T05:59:21.188Z")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedTeam_ids = [@"[4000000062001,4000000015029]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedLast_modified_time = [@"2023-11-30T05:59:21.188Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users?team_ids=%@&page=%@&per_page=%@&last_modified_time=%@", encodedTeam_ids, encodedPage, encodedPer_page, encodedLast_modified_time];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_team_ids = Uri.pct_encode "[4000000062001,4000000015029]" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_last_modified_time = Uri.pct_encode "2023-11-30T05:59:21.188Z" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users" ^ "?team_ids=" ^ enc_team_ids ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&last_modified_time=" ^ enc_last_modified_time) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    team_ids = "[4000000062001,4000000015029]"
    page = "1"
    per_page = "10"
    last_modified_time = "2023-11-30T05:59:21.188Z"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users"

params <- list(
  team_ids = "[4000000062001,4000000015029]",
  page = "1",
  per_page = "10",
  last_modified_time = "2023-11-30T05:59:21.188Z"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/users")!
components.queryItems = [
    URLQueryItem(name: "team_ids", value: "[4000000062001,4000000015029]"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "last_modified_time", value: "2023-11-30T05:59:21.188Z")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Associated Projects

Retrieve all projects associated with teams in a specific portal. Use this API to access the list of projects linked to teams within a portal.

GET

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

OAuth Scope:

ZohoProjects.teams.READ

Query Parameter

Param Name
Data Type
Description
team_ids

JSONArray

Enter the IDs of the teams to retrieve their associated projects.

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 modified time to retrieve projects modified after this 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects?team_ids=%5B4000000062001%2C4000000015029%5D&page=1&per_page=10&last_modified_time=2023-11-30T05%3A59%3A21.188Z' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects";
params = Map();
params.put("team_ids", "[4000000062001,4000000015029]");
params.put("page", "1");
params.put("per_page", "10");
params.put("last_modified_time", "2023-11-30T05:59:21.188Z");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects');
url.searchParams.append('team_ids', '[4000000062001,4000000015029]');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('last_modified_time', '2023-11-30T05:59:21.188Z');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects")
params = {
  "team_ids" => "[4000000062001,4000000015029]",
  "page" => "1",
  "per_page" => "10",
  "last_modified_time" => "2023-11-30T05:59:21.188Z"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'team_ids' => '[4000000062001,4000000015029]',
    'page' => '1',
    'per_page' => '10',
    'last_modified_time' => '2023-11-30T05:59:21.188Z',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects"

params = {
    "team_ids": "[4000000062001,4000000015029]",
    "page": "1",
    "per_page": "10",
    "last_modified_time": "2023-11-30T05:59:21.188Z"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_team_ids = curl_easy_escape(curl, "[4000000062001,4000000015029]", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects?team_ids=%s&page=%s&per_page=%s&last_modified_time=%s", enc_team_ids, enc_page, enc_per_page, enc_last_modified_time);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_team_ids);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["team_ids"] = "[4000000062001,4000000015029]";
query["page"] = "1";
query["per_page"] = "10";
query["last_modified_time"] = "2023-11-30T05:59:21.188Z";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_team_ids = curl_easy_escape(curl, "[4000000062001,4000000015029]", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects";
        url += "?team_ids=" + std::string(enc_team_ids);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&last_modified_time=" + std::string(enc_last_modified_time);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_team_ids);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-team_ids (java.net.URLEncoder/encode "[4000000062001,4000000015029]" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-last_modified_time (java.net.URLEncoder/encode "2023-11-30T05:59:21.188Z" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects" "?team_ids=" enc-team_ids "&page=" enc-page "&per_page=" enc-per_page "&last_modified_time=" enc-last_modified_time)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects", nil)
    q := req.URL.Query()
    q.Add("team_ids", "[4000000062001,4000000015029]")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("last_modified_time", "2023-11-30T05:59:21.188Z")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects?team_ids=%5B4000000062001%2C4000000015029%5D&page=1&per_page=10&last_modified_time=2023-11-30T05%3A59%3A21.188Z HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("team_ids", "[4000000062001,4000000015029]");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("last_modified_time", "2023-11-30T05:59:21.188Z");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects';

const params = new URLSearchParams({
  'team_ids': '[4000000062001,4000000015029]',
  'page': '1',
  'per_page': '10',
  'last_modified_time': '2023-11-30T05:59:21.188Z'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
team_ids = "[4000000062001,4000000015029]"
page = "1"
per_page = "10"
last_modified_time = "2023-11-30T05:59:21.188Z"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("team_ids", "[4000000062001,4000000015029]")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("last_modified_time", "2023-11-30T05:59:21.188Z")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedTeam_ids = [@"[4000000062001,4000000015029]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedLast_modified_time = [@"2023-11-30T05:59:21.188Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects?team_ids=%@&page=%@&per_page=%@&last_modified_time=%@", encodedTeam_ids, encodedPage, encodedPer_page, encodedLast_modified_time];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_team_ids = Uri.pct_encode "[4000000062001,4000000015029]" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_last_modified_time = Uri.pct_encode "2023-11-30T05:59:21.188Z" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects" ^ "?team_ids=" ^ enc_team_ids ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&last_modified_time=" ^ enc_last_modified_time) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    team_ids = "[4000000062001,4000000015029]"
    page = "1"
    per_page = "10"
    last_modified_time = "2023-11-30T05:59:21.188Z"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects"

params <- list(
  team_ids = "[4000000062001,4000000015029]",
  page = "1",
  per_page = "10",
  last_modified_time = "2023-11-30T05:59:21.188Z"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/projects")!
components.queryItems = [
    URLQueryItem(name: "team_ids", value: "[4000000062001,4000000015029]"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "last_modified_time", value: "2023-11-30T05:59:21.188Z")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 a specific portal. Use this API to set up a team and group users for collaborative work within a 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 project IDs to associate with the team.

JSONObject

required

Enter the user IDs to associate with the team.

lead

long

required

Enter the ID of the team lead.

email

String

max length : 100

Enter the email address of the team.

notify

boolean

Specify whether to notify the team members upon creation. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/teams' \
-H 'Authorization: Bearer 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"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams";
params = Map();
params.put("name", "Development Team");
params.put("project_ids", {"add":"[4000000005103, 4000000005133]"});
params.put("user_ids", {"add":"[4000000005103, 4000000005133]"});
params.put("lead", "4000000005103");
params.put("email", "devs-team@zylker.com");
params.put("notify", "false");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/teams');

const payload = JSON.stringify({"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/teams")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams");
request.Content = new StringContent(
    @"{""name"":""Development Team"",""project_ids"":{""add"":""[4000000005103, 4000000005133]""},""user_ids"":{""add"":""[4000000005103, 4000000005133]""},""lead"":""4000000005103"",""email"":""devs-team@zylker.com"",""notify"":""false""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/teams"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/teams", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/teams HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
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"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/teams';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/teams")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/teams"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/teams" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/teams" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/teams"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Development Team\",\"project_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"user_ids\":{\"add\":\"[4000000005103, 4000000005133]\"},\"lead\":\"4000000005103\",\"email\":\"devs-team@zylker.com\",\"notify\":\"false\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/teams")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Development Team","project_ids":{"add":"[4000000005103, 4000000005133]"},"user_ids":{"add":"[4000000005103, 4000000005133]"},"lead":"4000000005103","email":"devs-team@zylker.com","notify":"false"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 a specific team in a portal. Use this API to modify the name, members, or other details of an existing team.

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 updated name of the team.

project_ids

JSONObject

Enter the project IDs to update the team's project associations.

JSONObject

Enter the user IDs to update the team's member associations.

lead

long

Enter the ID of the team lead.

email

String

max length : 100

Enter the email address of the team.

notify

boolean

Specify whether to notify the team members about the update. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]' \
-H 'Authorization: Bearer 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"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]";
params = Map();
params.put("name", "Development Team");
params.put("project_ids", {"add":"[4000000005103, 4000000005133]","remove":"[4000000014077, 4000000008020]"});
params.put("user_ids", {"add":"[4000000005103, 4000000005133]","remove":"[4000000014077, 4000000008020]"});
params.put("lead", "4000000005103");
params.put("email", "devs-team@zylker.com");
params.put("notify", "false");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]');

const payload = JSON.stringify({"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"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"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"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"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"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"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"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]");
request.Content = new StringContent(
    @"{""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""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"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\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"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\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"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\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
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"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

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));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"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"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"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"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"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"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"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\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {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"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"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"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"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\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"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"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 specific team from a portal. Use this API to permanently remove a team and its associations within a portal.

DELETE

/api/v3/portal/[PORTALID]/teams/[TEAMID]

OAuth Scope:

ZohoProjects.teams.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/teams/[TEAMID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content
Project Teams

Get Project Teams

Retrieve all teams associated with a specific project. Use this API to access the list of teams and their members within 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 ID of the team to retrieve.

search_term

String

Enter a search term to filter teams by 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 modified time to retrieve teams modified after this time.

sort_by

String

Enter the sort criteria for the results. 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

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%3A59%3A21.188Z&sort_by=desc%28name%29' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams";
params = Map();
params.put("id", "4000000062001");
params.put("search_term", "Dev");
params.put("page", "1");
params.put("per_page", "10");
params.put("last_modified_time", "2023-11-30T05:59:21.188Z");
params.put("sort_by", "desc(name)");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams');
url.searchParams.append('id', '4000000062001');
url.searchParams.append('search_term', 'Dev');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('last_modified_time', '2023-11-30T05:59:21.188Z');
url.searchParams.append('sort_by', 'desc(name)');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams")
params = {
  "id" => "4000000062001",
  "search_term" => "Dev",
  "page" => "1",
  "per_page" => "10",
  "last_modified_time" => "2023-11-30T05:59:21.188Z",
  "sort_by" => "desc(name)"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'id' => '4000000062001',
    'search_term' => 'Dev',
    'page' => '1',
    'per_page' => '10',
    'last_modified_time' => '2023-11-30T05:59:21.188Z',
    'sort_by' => 'desc(name)',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams"

params = {
    "id": "4000000062001",
    "search_term": "Dev",
    "page": "1",
    "per_page": "10",
    "last_modified_time": "2023-11-30T05:59:21.188Z",
    "sort_by": "desc(name)"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_id = curl_easy_escape(curl, "4000000062001", 0);
        char *enc_search_term = curl_easy_escape(curl, "Dev", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        char *enc_sort_by = curl_easy_escape(curl, "desc(name)", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams?id=%s&search_term=%s&page=%s&per_page=%s&last_modified_time=%s&sort_by=%s", enc_id, enc_search_term, enc_page, enc_per_page, enc_last_modified_time, enc_sort_by);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_id);
        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["id"] = "4000000062001";
query["search_term"] = "Dev";
query["page"] = "1";
query["per_page"] = "10";
query["last_modified_time"] = "2023-11-30T05:59:21.188Z";
query["sort_by"] = "desc(name)";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_id = curl_easy_escape(curl, "4000000062001", 0);
        char* enc_search_term = curl_easy_escape(curl, "Dev", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_last_modified_time = curl_easy_escape(curl, "2023-11-30T05:59:21.188Z", 0);
        char* enc_sort_by = curl_easy_escape(curl, "desc(name)", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams";
        url += "?id=" + std::string(enc_id);
        url += "&search_term=" + std::string(enc_search_term);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&last_modified_time=" + std::string(enc_last_modified_time);
        url += "&sort_by=" + std::string(enc_sort_by);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_id);
        curl_free(enc_search_term);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_last_modified_time);
        curl_free(enc_sort_by);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-id (java.net.URLEncoder/encode "4000000062001" "UTF-8")
      enc-search_term (java.net.URLEncoder/encode "Dev" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-last_modified_time (java.net.URLEncoder/encode "2023-11-30T05:59:21.188Z" "UTF-8")
      enc-sort_by (java.net.URLEncoder/encode "desc(name)" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams" "?id=" enc-id "&search_term=" enc-search_term "&page=" enc-page "&per_page=" enc-per_page "&last_modified_time=" enc-last_modified_time "&sort_by=" enc-sort_by)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams", nil)
    q := req.URL.Query()
    q.Add("id", "4000000062001")
    q.Add("search_term", "Dev")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add("last_modified_time", "2023-11-30T05:59:21.188Z")
    q.Add("sort_by", "desc(name)")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
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%3A59%3A21.188Z&sort_by=desc%28name%29 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("id", "4000000062001");
uriBuilder.addParameter("search_term", "Dev");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter("last_modified_time", "2023-11-30T05:59:21.188Z");
uriBuilder.addParameter("sort_by", "desc(name)");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams';

const params = new URLSearchParams({
  'id': '4000000062001',
  'search_term': 'Dev',
  'page': '1',
  'per_page': '10',
  'last_modified_time': '2023-11-30T05:59:21.188Z',
  'sort_by': 'desc(name)'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
id = "4000000062001"
search_term = "Dev"
page = "1"
per_page = "10"
last_modified_time = "2023-11-30T05:59:21.188Z"
sort_by = "desc(name)"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("id", "4000000062001")
    urlBuilder.addQueryParameter("search_term", "Dev")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter("last_modified_time", "2023-11-30T05:59:21.188Z")
    urlBuilder.addQueryParameter("sort_by", "desc(name)")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedId = [@"4000000062001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSearch_term = [@"Dev" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedLast_modified_time = [@"2023-11-30T05:59:21.188Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedSort_by = [@"desc(name)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams?id=%@&search_term=%@&page=%@&per_page=%@&last_modified_time=%@&sort_by=%@", encodedId, encodedSearch_term, encodedPage, encodedPer_page, encodedLast_modified_time, encodedSort_by];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_id = Uri.pct_encode "4000000062001" in
  let enc_search_term = Uri.pct_encode "Dev" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_last_modified_time = Uri.pct_encode "2023-11-30T05:59:21.188Z" in
  let enc_sort_by = Uri.pct_encode "desc(name)" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams" ^ "?id=" ^ enc_id ^ "&search_term=" ^ enc_search_term ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&last_modified_time=" ^ enc_last_modified_time ^ "&sort_by=" ^ enc_sort_by) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    id = "4000000062001"
    search_term = "Dev"
    page = "1"
    per_page = "10"
    last_modified_time = "2023-11-30T05:59:21.188Z"
    sort_by = "desc(name)"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams"

params <- list(
  id = "4000000062001",
  search_term = "Dev",
  page = "1",
  per_page = "10",
  last_modified_time = "2023-11-30T05:59:21.188Z",
  sort_by = "desc(name)"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/teams")!
components.queryItems = [
    URLQueryItem(name: "id", value: "4000000062001"),
    URLQueryItem(name: "search_term", value: "Dev"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: "last_modified_time", value: "2023-11-30T05:59:21.188Z"),
    URLQueryItem(name: "sort_by", value: "desc(name)")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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" } }
Add Team (Project)

Add an existing team to a specific project. Use this API to associate a portal team with a project to grant its members access.

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 IDs of the teams to add to the project.

notify

boolean

Specify whether to notify the team members about being added to the project. Accepted values: true or 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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"team_ids":"[4000000062001,4000000015029]","notify":"false"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams";
params = Map();
params.put("team_ids", "[4000000062001,4000000015029]");
params.put("notify", "false");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams');

const payload = JSON.stringify({"team_ids":"[4000000062001,4000000015029]","notify":"false"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"team_ids":"[4000000062001,4000000015029]","notify":"false"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"team_ids":"[4000000062001,4000000015029]","notify":"false"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"team_ids":"[4000000062001,4000000015029]","notify":"false"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams");
request.Content = new StringContent(
    @"{""team_ids"":""[4000000062001,4000000015029]"",""notify"":""false""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"team_ids":"[4000000062001,4000000015029]","notify":"false"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"team_ids":"[4000000062001,4000000015029]","notify":"false"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"team_ids":"[4000000062001,4000000015029]","notify":"false"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"team_ids":"[4000000062001,4000000015029]","notify":"false"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"team_ids":"[4000000062001,4000000015029]","notify":"false"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"team_ids\":\"[4000000062001,4000000015029]\",\"notify\":\"false\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-teams")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"team_ids":"[4000000062001,4000000015029]","notify":"false"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Project Team

Remove a specific team from a project. Use this API to dissociate a team from a project and revoke its members' project access.

DELETE

/api/v3/portal/[PORTALID]/projects/[PROJECTID]/dissociate-teams/[DISSOCIATE-TEAMID]

OAuth Scope:

ZohoProjects.teams.DELETE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]";
response = invokeUrl
[
    url: url
    type: DELETE
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]';

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]" -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]"

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/dissociate-teams/[DISSOCIATE-TEAMID]")!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 Portal Profiles

Retrieve all profiles in a specific portal. Use this API to access the list of profiles and their configurations within a 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 criteria for the results. 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 to narrow down the profile results.

ids

String

Enter the IDs of the profiles to retrieve.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles?sort_by=ASC%28last_modified_time%29&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=4000000029001' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles";
params = Map();
params.put("sort_by", "ASC(last_modified_time)");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"});
params.put("ids", "4000000029001");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}');
url.searchParams.append('ids', '4000000029001');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles")
params = {
  "sort_by" => "ASC(last_modified_time)",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  "ids" => "4000000029001"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'sort_by' => 'ASC(last_modified_time)',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
    'ids' => '4000000029001',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles"

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

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_ids = curl_easy_escape(curl, "4000000029001", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles?sort_by=%s&page=%s&per_page=%s&\"filter\"=%s&ids=%s", enc_sort_by, enc_page, enc_per_page, enc_"filter", enc_ids);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_sort_by);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["sort_by"] = "ASC(last_modified_time)";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
query["ids"] = "4000000029001";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_ids = curl_easy_escape(curl, "4000000029001", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles";
        url += "?sort_by=" + std::string(enc_sort_by);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&ids=" + std::string(enc_ids);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_sort_by);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-ids (java.net.URLEncoder/encode "4000000029001" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles" "?sort_by=" enc-sort_by "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&ids=" enc-ids)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles", nil)
    q := req.URL.Query()
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("ids", "4000000029001")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/profiles?sort_by=ASC%28last_modified_time%29&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=4000000029001 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("ids", "4000000029001");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles';

const params = new URLSearchParams({
  'sort_by': 'ASC(last_modified_time)',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
  'ids': '4000000029001'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
sort_by = "ASC(last_modified_time)"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}
ids = "4000000029001"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("ids", "4000000029001")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIds = [@"4000000029001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles?sort_by=%@&page=%@&per_page=%@&"filter"=%@&ids=%@", encodedSort_by, encodedPage, encodedPer_page, encoded"filter", encodedIds];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_ids = Uri.pct_encode "4000000029001" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles" ^ "?sort_by=" ^ enc_sort_by ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&ids=" ^ enc_ids) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    sort_by = "ASC(last_modified_time)"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"-`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"-`",`"unit`":`"-`",`"prior`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
    ids = "4000000029001"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles"

params <- list(
  sort_by = "ASC(last_modified_time)",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  ids = "4000000029001"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles")!
components.queryItems = [
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "ids", value: "4000000029001")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

sort_by : "ASC(last_modified_time)" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "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 the details of a specific profile in a portal. Use this API to access the permissions and configurations of a profile within a portal.

GET

/api/v3/portal/[PORTALID]/profiles/[PROFILEID]

OAuth Scope:

ZohoProjects.portals.READ

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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 a new profile in a specific portal. Use this API to define a custom set of permissions and configurations for users within a portal.

POST

/api/v3/portal/[PORTALID]/profiles

OAuth Scope:

ZohoProjects.portals.CREATE

Parameter

Param Name
Data Type
Description
name

String

required

Enter the name of the profile.

type

String

default : normal

Enter the type of the profile. Accepted values: normal or client

is_primary

boolean

Specify whether to set the profile as the default profile. Accepted values: true or false

clone_from

long

Enter the ID of an existing profile to clone permissions and configurations from.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles";
params = Map();
params.put("name", "Client (Primary & Cloned)");
params.put("type", "Client");
params.put("is_primary", false);
params.put("clone_from", "170876000004602149");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles');

const payload = JSON.stringify({"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Client (Primary & Cloned)\",\"type\":\"Client\",\"is_primary\":false,\"clone_from\":\"170876000004602149\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles");
request.Content = new StringContent(
    @"{""name"":""Client (Primary & Cloned)"",""type"":""Client"",""is_primary"":false,""clone_from"":""170876000004602149""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Client (Primary & Cloned)\",\"type\":\"Client\",\"is_primary\":false,\"clone_from\":\"170876000004602149\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Client (Primary & Cloned)\",\"type\":\"Client\",\"is_primary\":false,\"clone_from\":\"170876000004602149\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Client (Primary & Cloned)\",\"type\":\"Client\",\"is_primary\":false,\"clone_from\":\"170876000004602149\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/profiles HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}
HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();

SSLContext sslContext = SSLContext.getDefault();
SSLConnectionSocketFactory 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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Client (Primary & Cloned)\",\"type\":\"Client\",\"is_primary\":false,\"clone_from\":\"170876000004602149\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Client (Primary & Cloned)\",\"type\":\"Client\",\"is_primary\":false,\"clone_from\":\"170876000004602149\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Client (Primary & Cloned)\",\"type\":\"Client\",\"is_primary\":false,\"clone_from\":\"170876000004602149\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Client (Primary & Cloned)","type":"Client","is_primary":false,"clone_from":"170876000004602149"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Client (Primary & Cloned)", "type" : "Client", "is_primary" : false, "clone_from" : "170876000004602149" }

Sample Response

201{ "is_primary" : false, "name" : "Client (Primary & Cloned)", "is_customized" : false, "id" : "7000044368029", "type" : "3", "is_default" : false }
Set Default profile

Set a specific profile as the default profile in a portal. Use this API to define which profile is applied by default when adding new users to a portal.

POST

/api/v3/portal/[PORTALID]/profiles/[PROFILEID]/setprimary

OAuth Scope:

ZohoProjects.portals.UPDATE

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/setprimary")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Response

204 No Content

Possible Errors

RESOURCE_NOT_FOUND HTTP 404

INVALID_PARAMETER_VALUE HTTP 400

Update Profile

Modify the details of a specific profile in a portal. Use this API to modify the permissions and configurations of an existing profile within a 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 name of the profile.

is_primary

boolean

Specify whether to set the profile as the default profile. Accepted values: true or false

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Client (Primary & Cloned)","is_primary":false}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]";
params = Map();
params.put("name", "Client (Primary & Cloned)");
params.put("is_primary", false);
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]');

const payload = JSON.stringify({"name":"Client (Primary & Cloned)","is_primary":false});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Client (Primary & Cloned)","is_primary":false}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"Client (Primary & Cloned)","is_primary":false}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Client (Primary & Cloned)","is_primary":false}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Client (Primary & Cloned)\",\"is_primary\":false}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]");
request.Content = new StringContent(
    @"{""name"":""Client (Primary & Cloned)"",""is_primary"":false}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Client (Primary & Cloned)\",\"is_primary\":false}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Client (Primary & Cloned)\",\"is_primary\":false}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Client (Primary & Cloned)\",\"is_primary\":false}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Client (Primary & Cloned)","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Client (Primary & Cloned)\",\"is_primary\":false}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Client (Primary & Cloned)","is_primary":false})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Client (Primary & Cloned)","is_primary":false}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Client (Primary & Cloned)","is_primary":false}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Client (Primary & Cloned)\",\"is_primary\":false}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Client (Primary & Cloned)","is_primary":false}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Client (Primary & Cloned)","is_primary":false}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Client (Primary & Cloned)\",\"is_primary\":false}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Client (Primary & Cloned)","is_primary":false}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Client (Primary & Cloned)", "is_primary" : false }

Sample Response

204 No Content
Delete Profile

Remove a specific profile from a portal. Use this API to permanently remove a profile and its associated permissions from a 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 to migrate users to upon deletion. If not provided, users will be migrated to the default profile.

Request Example

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]?alternate_profile=4000000002858' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]";
params = Map();
params.put("alternate_profile", "4000000002858");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]');
url.searchParams.append('alternate_profile', '4000000002858');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")
params = {
  "alternate_profile" => "4000000002858"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'alternate_profile' => '4000000002858',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"

params = {
    "alternate_profile": "4000000002858"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_alternate_profile = curl_easy_escape(curl, "4000000002858", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]?alternate_profile=%s", enc_alternate_profile);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_alternate_profile);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["alternate_profile"] = "4000000002858";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_alternate_profile = curl_easy_escape(curl, "4000000002858", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]";
        url += "?alternate_profile=" + std::string(enc_alternate_profile);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_alternate_profile);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-alternate_profile (java.net.URLEncoder/encode "4000000002858" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" "?alternate_profile=" enc-alternate_profile)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]", nil)
    q := req.URL.Query()
    q.Add("alternate_profile", "4000000002858")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]?alternate_profile=4000000002858 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]");
uriBuilder.addParameter("alternate_profile", "4000000002858");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]';

const params = new URLSearchParams({
  'alternate_profile': '4000000002858'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
alternate_profile = "4000000002858"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("alternate_profile", "4000000002858")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedAlternate_profile = [@"4000000002858" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]?alternate_profile=%@", encodedAlternate_profile];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_alternate_profile = Uri.pct_encode "4000000002858" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" ^ "?alternate_profile=" ^ enc_alternate_profile) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    alternate_profile = "4000000002858"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]"

params <- list(
  alternate_profile = "4000000002858"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]")!
components.queryItems = [
    URLQueryItem(name: "alternate_profile", value: "4000000002858")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/roles?sort_by=ASC%28last_modified_time%29&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=4000000029001' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles";
params = Map();
params.put("sort_by", "ASC(last_modified_time)");
params.put("page", "1");
params.put("per_page", "10");
params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"});
params.put("ids", "4000000029001");
response = invokeUrl
[
    url: url
    type: GET
    parameters: params
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/roles');
url.searchParams.append('sort_by', 'ASC(last_modified_time)');
url.searchParams.append('page', '1');
url.searchParams.append('per_page', '10');
url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}');
url.searchParams.append('ids', '4000000029001');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/roles")
params = {
  "sort_by" => "ASC(last_modified_time)",
  "page" => "1",
  "per_page" => "10",
  ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  "ids" => "4000000029001"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'sort_by' => 'ASC(last_modified_time)',
    'page' => '1',
    'per_page' => '10',
    '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
    'ids' => '4000000029001',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles"

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

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char *enc_page = curl_easy_escape(curl, "1", 0);
        char *enc_per_page = curl_easy_escape(curl, "10", 0);
        char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char *enc_ids = curl_easy_escape(curl, "4000000029001", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/roles?sort_by=%s&page=%s&per_page=%s&\"filter\"=%s&ids=%s", enc_sort_by, enc_page, enc_per_page, enc_"filter", enc_ids);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_sort_by);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["sort_by"] = "ASC(last_modified_time)";
query["page"] = "1";
query["per_page"] = "10";
query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
query["ids"] = "4000000029001";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/roles") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
        char* enc_page = curl_easy_escape(curl, "1", 0);
        char* enc_per_page = curl_easy_escape(curl, "10", 0);
        char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
        char* enc_ids = curl_easy_escape(curl, "4000000029001", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles";
        url += "?sort_by=" + std::string(enc_sort_by);
        url += "&page=" + std::string(enc_page);
        url += "&per_page=" + std::string(enc_per_page);
        url += "&"filter"=" + std::string(enc_"filter");
        url += "&ids=" + std::string(enc_ids);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_sort_by);
        curl_free(enc_page);
        curl_free(enc_per_page);
        curl_free(enc_"filter");
        curl_free(enc_ids);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
      enc-page (java.net.URLEncoder/encode "1" "UTF-8")
      enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
      enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
      enc-ids (java.net.URLEncoder/encode "4000000029001" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/roles" "?sort_by=" enc-sort_by "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter" "&ids=" enc-ids)]
(def response
  (client/get url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/roles", nil)
    q := req.URL.Query()
    q.Add("sort_by", "ASC(last_modified_time)")
    q.Add("page", "1")
    q.Add("per_page", "10")
    q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    q.Add("ids", "4000000029001")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/roles?sort_by=ASC%28last_modified_time%29&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&ids=4000000029001 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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");
uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
uriBuilder.addParameter("page", "1");
uriBuilder.addParameter("per_page", "10");
uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
uriBuilder.addParameter("ids", "4000000029001");
HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/roles';

const params = new URLSearchParams({
  'sort_by': 'ASC(last_modified_time)',
  'page': '1',
  'per_page': '10',
  '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
  'ids': '4000000029001'
});

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
sort_by = "ASC(last_modified_time)"
page = "1"
per_page = "10"
"filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}
ids = "4000000029001"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
    urlBuilder.addQueryParameter("page", "1")
    urlBuilder.addQueryParameter("per_page", "10")
    urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
    urlBuilder.addQueryParameter("ids", "4000000029001")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *encodedIds = [@"4000000029001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/roles?sort_by=%@&page=%@&per_page=%@&"filter"=%@&ids=%@", encodedSort_by, encodedPage, encodedPer_page, encoded"filter", encodedIds];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
  let enc_page = Uri.pct_encode "1" in
  let enc_per_page = Uri.pct_encode "10" in
  let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
  let enc_ids = Uri.pct_encode "4000000029001" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/roles" ^ "?sort_by=" ^ enc_sort_by ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter" ^ "&ids=" ^ enc_ids) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    sort_by = "ASC(last_modified_time)"
    page = "1"
    per_page = "10"
    "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"-`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"-`",`"unit`":`"-`",`"prior`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
    ids = "4000000029001"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/roles"

params <- list(
  sort_by = "ASC(last_modified_time)",
  page = "1",
  per_page = "10",
  "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}",
  ids = "4000000029001"
)

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/roles")!
components.queryItems = [
    URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
    URLQueryItem(name: "page", value: "1"),
    URLQueryItem(name: "per_page", value: "10"),
    URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"),
    URLQueryItem(name: "ids", value: "4000000029001")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

sort_by : "ASC(last_modified_time)" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X GET \
'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]";
response = invokeUrl
[
    url: url
    type: GET
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Get.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "GET",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.get(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
GET https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]';

const options = {
  method: 'GET',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "GET"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"GET"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.get ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" -Method GET -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"

response <- GET(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")!
var request = URLRequest(url: url)
request.httpMethod = "GET"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/roles' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Custom Developer","sequence":"5","is_primary":"false"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles";
params = Map();
params.put("name", "Custom Developer");
params.put("sequence", "5");
params.put("is_primary", "false");
response = invokeUrl
[
    url: url
    type: POST
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/roles');

const payload = JSON.stringify({"name":"Custom Developer","sequence":"5","is_primary":"false"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/roles")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Custom Developer","sequence":"5","is_primary":"false"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_POSTFIELDS => '{"name":"Custom Developer","sequence":"5","is_primary":"false"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Custom Developer","sequence":"5","is_primary":"false"}'

response = requests.post(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles");
request.Content = new StringContent(
    @"{""name"":""Custom Developer"",""sequence"":""5"",""is_primary"":""false""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/roles"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}")
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/roles", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/roles HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Custom Developer","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/roles';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Custom Developer","sequence":"5","is_primary":"false"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Custom Developer","sequence":"5","is_primary":"false"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/roles")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Custom Developer","sequence":"5","is_primary":"false"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/roles"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/roles" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Custom Developer","sequence":"5","is_primary":"false"}|json} in
  Lwt_main.run (
    Client.post ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Custom Developer","sequence":"5","is_primary":"false"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/roles" -Method POST -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/roles"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/roles")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Custom Developer","sequence":"5","is_primary":"false"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Custom Developer", "sequence" : "5", "is_primary" : "false" }

Sample Response

201{ "is_primary" : "false", "name" : "Custom Developer", "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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X PATCH \
'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
-H 'Content-Type: application/json' \
-d '{"name":"Custom Developer","sequence":"5","is_primary":"false"}'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]";
params = Map();
params.put("name", "Custom Developer");
params.put("sequence", "5");
params.put("is_primary", "false");
response = invokeUrl
[
    url: url
    type: PATCH
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]');

const payload = JSON.stringify({"name":"Custom Developer","sequence":"5","is_primary":"false"});

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json',
    'Content-Length': Buffer.byteLength(payload)
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.write(payload);
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Patch.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
request["Content-Type"] = "application/json"
request.body = '{"name":"Custom Developer","sequence":"5","is_primary":"false"}'

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "PATCH",
  CURLOPT_POSTFIELDS => '{"name":"Custom Developer","sequence":"5","is_primary":"false"}',
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type: application/json"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    "Content-Type": "application/json",
}

payload = '{"name":"Custom Developer","sequence":"5","is_primary":"false"}'

response = requests.patch(url, headers=headers, data=payload)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]");
request.Content = new StringContent(
    @"{""name"":""Custom Developer"",""sequence"":""5"",""is_primary"":""false""}",
    Encoding.UTF8,
    "application/json"
);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        headers = curl_slist_append(headers, "Content-Type: application/json");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}");

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                "Content-Type" "application/json"}
     :body "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}"
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "strings"
)

func main() {
    payload := strings.NewReader("{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}")
    req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]", payload)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    req.Header.Add("Content-Type", "application/json")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID] HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
Content-Type: application/json

{"name":"Custom Developer","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());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
String requestBody = "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}";
requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]';

const options = {
  method: 'PATCH',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
    'Content-Type': 'application/json'
  },
  body: JSON.stringify({"name":"Custom Developer","sequence":"5","is_primary":"false"})
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
{"name":"Custom Developer","sequence":"5","is_primary":"false"}
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "PATCH"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    conn.setRequestProperty("Content-Type", "application/json")
    conn.doOutput = true
    conn.outputStream.bufferedWriter().use { it.write("""{"name":"Custom Developer","sequence":"5","is_primary":"false"}""") }

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"PATCH"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
[request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
NSData *body = [@"{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
[request setHTTPBody:body];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
  in
  let body = Cohttp_lwt.Body.of_string {json|{"name":"Custom Developer","sequence":"5","is_primary":"false"}|json} in
  Lwt_main.run (
    Client.patch ~headers ~body uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    "Content-Type" = "application/json"
}

$body = @'
{"name":"Custom Developer","sequence":"5","is_primary":"false"}
'@

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" -Method PATCH -Headers $headers -Body $body

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"

response <- PATCH(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  content_type_json(),
  body = "{\"name\":\"Custom Developer\",\"sequence\":\"5\",\"is_primary\":\"false\"}"
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")!
var request = URLRequest(url: url)
request.httpMethod = "PATCH"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
request.setValue("application/json", forHTTPHeaderField: "Content-Type")
request.httpBody = """
{"name":"Custom Developer","sequence":"5","is_primary":"false"}
""".data(using: .utf8)

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

Content-Type: application/json
{ "name" : "Custom Developer", "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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X POST \
'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary";
response = invokeUrl
[
    url: url
    type: POST
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary")

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Post.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary";

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "POST",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary"

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.post(url, headers=headers)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary");

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary");
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(def response
  (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary"
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
)

func main() {
    req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary", nil)
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
POST https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary';

const options = {
  method: 'POST',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url, options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary")
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "POST"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary"];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"POST"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary" in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.post ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary" -Method POST -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary"

response <- POST(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
)

content(response, "text")
import Foundation

let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]/setprimary")!
var request = URLRequest(url: url)
request.httpMethod = "POST"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

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

Request Example cURL
  • cURL
  • Deluge
  • Node.js
  • Ruby
  • PHP
  • Python
  • C
  • C#
  • C++
  • Clojure
  • Go
  • HTTP
  • Java
  • JS Fetch
  • JSON
  • Kotlin
  • Objective-C
  • OCaml
  • PowerShell
  • R
  • Swift

curl -X DELETE \
'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]?alternate_role=4000000002417' \
-H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]";
params = Map();
params.put("alternate_role", "4000000002417");
response = invokeUrl
[
    url: url
    type: DELETE
    parameters: params.toString()
    connection: "projects"
];
info response;
const https = require('https');
const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]');
url.searchParams.append('alternate_role', '4000000002417');

const options = {
  hostname: url.hostname,
  path: url.pathname + url.search,
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

const req = https.request(options, (res) => {
  let data = '';
  res.on('data', (chunk) => { data += chunk; });
  res.on('end', () => { console.log(JSON.parse(data)); });
});

req.on('error', (err) => { console.error(err); });
req.end();
require 'net/http'
require 'uri'
require 'json'

url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")
params = {
  "alternate_role" => "4000000002417"
}
url.query = URI.encode_www_form(params)

http = Net::HTTP.new(url.host, url.port)
http.use_ssl = true

request = Net::HTTP::Delete.new(url)
request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"

response = http.request(request)
puts response.read_body
<?php
$params = [
    'alternate_role' => '4000000002417',
];
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" . "?" . http_build_query($params);

$curl = curl_init();

curl_setopt_array($curl, [
  CURLOPT_URL => $url,
  CURLOPT_RETURNTRANSFER => true,
  CURLOPT_CUSTOMREQUEST => "DELETE",
  CURLOPT_HTTPHEADER => [
    "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  ],
]);

$response = curl_exec($curl);
curl_close($curl);

echo $response;
import requests

url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"

params = {
    "alternate_role": "4000000002417"
}

headers = {
    "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
}

response = requests.delete(url, headers=headers, params=params)

print(response.json())
#include <stdio.h>
#include <string.h>
#include <curl/curl.h>

int main(void) {
    CURL *curl = curl_easy_init();
    if (curl) {
        char *enc_alternate_role = curl_easy_escape(curl, "4000000002417", 0);
        char url[2048];
        snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]?alternate_role=%s", enc_alternate_role);

        struct curl_slist *headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url);
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");

        CURLcode res = curl_easy_perform(curl);
        if (res != CURLE_OK)
            fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));

        curl_free(enc_alternate_role);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
using System.Net.Http;
using System.Text;
using System.Web;

var client = new HttpClient();
client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

var query = HttpUtility.ParseQueryString(string.Empty);
query["alternate_role"] = "4000000002417";
var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]") { Query = query.ToString() };
var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);

var response = await client.SendAsync(request);
var body = await response.Content.ReadAsStringAsync();
Console.WriteLine(body);
#include <iostream>
#include <string>
#include <curl/curl.h>

static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
    output->append((char*)contents, size * nmemb);
    return size * nmemb;
}

int main() {
    CURL* curl = curl_easy_init();
    if (curl) {
        std::string response;
        char* enc_alternate_role = curl_easy_escape(curl, "4000000002417", 0);
        std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]";
        url += "?alternate_role=" + std::string(enc_alternate_role);

        struct curl_slist* headers = NULL;
        headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

        curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
        curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
        curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
        curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);

        CURLcode res = curl_easy_perform(curl);
        if (res == CURLE_OK)
            std::cout << response << std::endl;
        else
            std::cerr << curl_easy_strerror(res) << std::endl;

        curl_free(enc_alternate_role);
        curl_slist_free_all(headers);
        curl_easy_cleanup(curl);
    }
    return 0;
}
(require '[clj-http.client :as client])

(let [enc-alternate_role (java.net.URLEncoder/encode "4000000002417" "UTF-8")
      url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" "?alternate_role=" enc-alternate_role)]
(def response
  (client/delete url
    {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
     :as :json}))

(println (:body response))
package main

import (
    "fmt"
    "io"
    "net/http"
    "net/url"
)

func main() {
    req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]", nil)
    q := req.URL.Query()
    q.Add("alternate_role", "4000000002417")
    req.URL.RawQuery = q.Encode()
    req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    resp, _ := http.DefaultClient.Do(req)
    defer resp.Body.Close()
    body, _ := io.ReadAll(resp.Body)
    fmt.Println(string(body))
}
DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]?alternate_role=4000000002417 HTTP/1.1
Host: projectsapi.zoho.com
Authorization: Bearer 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]");
uriBuilder.addParameter("alternate_role", "4000000002417");
HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");

HttpResponse response = httpclient.execute(requestObj);

HttpEntity responseEntity = response.getEntity();
Object responseObject = EntityUtils.toString(responseEntity);
String responseString = responseObject.toString();
const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]';

const params = new URLSearchParams({
  'alternate_role': '4000000002417'
});

const options = {
  method: 'DELETE',
  headers: {
    'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
  }
};

fetch(url + '?' + params.toString(), options)
  .then(response => response.json())
  .then(data => console.log(data))
  .catch(error => console.error(error));
alternate_role = "4000000002417"
import java.net.HttpURLConnection
import java.net.URL
import okhttp3.HttpUrl.Companion.toHttpUrl

fun main() {
    val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]".toHttpUrl().newBuilder()
    urlBuilder.addQueryParameter("alternate_role", "4000000002417")
    val url = URL(urlBuilder.build().toString())
    val conn = url.openConnection() as HttpURLConnection
    conn.requestMethod = "DELETE"
    conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")

    val response = conn.inputStream.bufferedReader().readText()
    println(response)
}
NSString *encodedAlternate_role = [@"4000000002417" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]?alternate_role=%@", encodedAlternate_role];
NSURL *url = [NSURL URLWithString:urlString];
NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
[request setHTTPMethod:@"DELETE"];
[request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];

NSURLSession *session = [NSURLSession sharedSession];
NSURLSessionDataTask *task = [session dataTaskWithRequest:request
    completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
        NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
        NSLog(@"%@", result);
}];
[task resume];
open Lwt
open Cohttp_lwt_unix

let () =
  let enc_alternate_role = Uri.pct_encode "4000000002417" in
  let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" ^ "?alternate_role=" ^ enc_alternate_role) in
  let headers = Cohttp.Header.init ()
    |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
  in
  Lwt_main.run (
    Client.delete ~headers uri >>= fun (_, body) ->
    Cohttp_lwt.Body.to_string body >|= fun s ->
    print_endline s)
$headers = @{
    "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
}

$params = @{
    alternate_role = "4000000002417"
}
$queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
$url = "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]" + "?" + $queryString

$response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers

$response | ConvertTo-Json
library(httr)

url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]"

params <- list(
  alternate_role = "4000000002417"
)

response <- DELETE(
  url,
  add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
  query = params
)

content(response, "text")
import Foundation

var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/roles/[ROLEID]")!
components.queryItems = [
    URLQueryItem(name: "alternate_role", value: "4000000002417")
]
let url = components.url!
var request = URLRequest(url: url)
request.httpMethod = "DELETE"
request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")

let semaphore = DispatchSemaphore(value: 0)
let task = URLSession.shared.dataTask(with: request) { data, response, error in
    if let data = data, let result = String(data: data, encoding: .utf8) {
        print(result)
    }
    semaphore.signal()
}
task.resume()
semaphore.wait()

Sample Input

alternate_role : "4000000002417"

Sample Response

204 No Content
Permissions

This module covers all operations related to permissions and access management within Zoho Projects. Use this API to retrieve permission details, set, or revoke permissions of users and profiles.

Get Permission for a Profile

Retrieve module permission details of a profile.

GET

/api/v3/portal/[PORTALID]/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions

OAuth Scope:

ZohoProjects.portals.READ

Query Parameter

Param Name
Data Type
Description

Request Example

Request Example cURL

    Sample Response

    200[ { "module" : "task", "actions" : [ "view_all", "create", "edit_all", "delete_all", "reorder", "follower", "blueprintview", "blueprintassociate" ] } ]
    Get Permission for Profiles

    Retrieve module permission details of multiple profiles.

    GET

    /api/v3/portal/[PORTALID]/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions

    OAuth Scope:

    ZohoProjects.portals.READ

    Query Parameter

    Param Name
    Data Type
    Description
    profile_ids

    String

    required

    Enter the profile IDs.

    Request Example

    Request Example cURL
    • cURL
    • Deluge
    • Node.js
    • Ruby
    • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • JSON
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

    curl -X GET \
    'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions?profile_ids=170876000004602137' \
    -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions";
    params = Map();
    params.put("profile_ids", "170876000004602137");
    response = invokeUrl
    [
        url: url
        type: GET
        parameters: params
        connection: "projects"
    ];
    info response;
    
    const https = require('https');
    const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions');
    url.searchParams.append('profile_ids', '170876000004602137');
    
    const options = {
      hostname: url.hostname,
      path: url.pathname + url.search,
      method: 'GET',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
      }
    };
    
    const req = https.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => { data += chunk; });
      res.on('end', () => { console.log(JSON.parse(data)); });
    });
    
    req.on('error', (err) => { console.error(err); });
    req.end();
    
    require 'net/http'
    require 'uri'
    require 'json'
    
    url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions")
    params = {
      "profile_ids" => "170876000004602137"
    }
    url.query = URI.encode_www_form(params)
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    
    request = Net::HTTP::Get.new(url)
    request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    
    response = http.request(request)
    puts response.read_body
    
    <?php
    $params = [
        'profile_ids' => '170876000004602137',
    ];
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions" . "?" . http_build_query($params);
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_HTTPHEADER => [
        "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      ],
    ]);
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    echo $response;
    
    import requests
    
    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions"
    
    params = {
        "profile_ids": "170876000004602137"
    }
    
    headers = {
        "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    }
    
    response = requests.get(url, headers=headers, params=params)
    
    print(response.json())
    
    #include <stdio.h>
    #include <string.h>
    #include <curl/curl.h>
    
    int main(void) {
        CURL *curl = curl_easy_init();
        if (curl) {
            char *enc_profile_ids = curl_easy_escape(curl, "170876000004602137", 0);
            char url[2048];
            snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions?profile_ids=%s", enc_profile_ids);
    
            struct curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
            curl_easy_setopt(curl, CURLOPT_URL, url);
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
    
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK)
                fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
    
            curl_free(enc_profile_ids);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    using System.Net.Http;
    using System.Text;
    using System.Web;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    var query = HttpUtility.ParseQueryString(string.Empty);
    query["profile_ids"] = "170876000004602137";
    var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions") { Query = query.ToString() };
    var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
    
    var response = await client.SendAsync(request);
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
        output->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    int main() {
        CURL* curl = curl_easy_init();
        if (curl) {
            std::string response;
            char* enc_profile_ids = curl_easy_escape(curl, "170876000004602137", 0);
            std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions";
            url += "?profile_ids=" + std::string(enc_profile_ids);
    
            struct curl_slist* headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
    
            CURLcode res = curl_easy_perform(curl);
            if (res == CURLE_OK)
                std::cout << response << std::endl;
            else
                std::cerr << curl_easy_strerror(res) << std::endl;
    
            curl_free(enc_profile_ids);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    (require '[clj-http.client :as client])
    
    (let [enc-profile_ids (java.net.URLEncoder/encode "170876000004602137" "UTF-8")
          url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions" "?profile_ids=" enc-profile_ids)]
    (def response
      (client/get url
        {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
         :as :json}))
    
    (println (:body response))
    
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "net/url"
    )
    
    func main() {
        req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions", nil)
        q := req.URL.Query()
        q.Add("profile_ids", "170876000004602137")
        req.URL.RawQuery = q.Encode()
        req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    
        resp, _ := http.DefaultClient.Do(req)
        defer resp.Body.Close()
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    
    GET https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions?profile_ids=170876000004602137 HTTP/1.1
    Host: projectsapi.zoho.com
    Authorization: Bearer 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/[ records | others | portal | settings | integrations | custom | any ]/permissions");
    uriBuilder.addParameter("profile_ids", "170876000004602137");
    HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
    requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    HttpResponse response = httpclient.execute(requestObj);
    
    HttpEntity responseEntity = response.getEntity();
    Object responseObject = EntityUtils.toString(responseEntity);
    String responseString = responseObject.toString();
    
    const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions';
    
    const params = new URLSearchParams({
      'profile_ids': '170876000004602137'
    });
    
    const options = {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
      }
    };
    
    fetch(url + '?' + params.toString(), options)
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
    profile_ids = "170876000004602137"
    
    import java.net.HttpURLConnection
    import java.net.URL
    import okhttp3.HttpUrl.Companion.toHttpUrl
    
    fun main() {
        val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions".toHttpUrl().newBuilder()
        urlBuilder.addQueryParameter("profile_ids", "170876000004602137")
        val url = URL(urlBuilder.build().toString())
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "GET"
        conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    
        val response = conn.inputStream.bufferedReader().readText()
        println(response)
    }
    
    NSString *encodedProfile_ids = [@"170876000004602137" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions?profile_ids=%@", encodedProfile_ids];
    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@", result);
    }];
    [task resume];
    
    open Lwt
    open Cohttp_lwt_unix
    
    let () =
      let enc_profile_ids = Uri.pct_encode "170876000004602137" in
      let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions" ^ "?profile_ids=" ^ enc_profile_ids) in
      let headers = Cohttp.Header.init ()
        |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      in
      Lwt_main.run (
        Client.get ~headers uri >>= fun (_, body) ->
        Cohttp_lwt.Body.to_string body >|= fun s ->
        print_endline s)
    
    $headers = @{
        "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    }
    
    $params = @{
        profile_ids = "170876000004602137"
    }
    $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions" + "?" + $queryString
    
    $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
    
    $response | ConvertTo-Json
    
    library(httr)
    
    url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions"
    
    params <- list(
      profile_ids = "170876000004602137"
    )
    
    response <- GET(
      url,
      add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
      query = params
    )
    
    content(response, "text")
    
    import Foundation
    
    var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[ records | others | portal | settings | integrations | custom | any ]/permissions")!
    components.queryItems = [
        URLQueryItem(name: "profile_ids", value: "170876000004602137")
    ]
    let url = components.url!
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
    
    let semaphore = DispatchSemaphore(value: 0)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data, let result = String(data: data, encoding: .utf8) {
            print(result)
        }
        semaphore.signal()
    }
    task.resume()
    semaphore.wait()
    

    Sample Input

    profile_ids : "170876000004602137"

    Sample Response

    200{ "7000000000987" : [ { "module" : "task", "actions" : [ "view_all", "create", "edit_all", "delete_all", "reorder", "follower", "blueprintview", "blueprintassociate" ] } ] }
    Get Field Permission for a Profile

    Retrieve field permission details of a profile.

    GET

    /api/v3/portal/[PORTALID]/profiles/[PROFILEID]/fields/permissions

    OAuth Scope:

    ZohoProjects.portals.READ

    Query Parameter

    Param Name
    Data Type
    Description
    modules

    String

    required

    Enter the module name.

    Request Example

    Request Example cURL
    • cURL
    • Deluge
    • Node.js
    • Ruby
    • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • JSON
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

    curl -X GET \
    'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions?modules=tasks' \
    -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions";
    params = Map();
    params.put("modules", "tasks");
    response = invokeUrl
    [
        url: url
        type: GET
        parameters: params
        connection: "projects"
    ];
    info response;
    
    const https = require('https');
    const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions');
    url.searchParams.append('modules', 'tasks');
    
    const options = {
      hostname: url.hostname,
      path: url.pathname + url.search,
      method: 'GET',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
      }
    };
    
    const req = https.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => { data += chunk; });
      res.on('end', () => { console.log(JSON.parse(data)); });
    });
    
    req.on('error', (err) => { console.error(err); });
    req.end();
    
    require 'net/http'
    require 'uri'
    require 'json'
    
    url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions")
    params = {
      "modules" => "tasks"
    }
    url.query = URI.encode_www_form(params)
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    
    request = Net::HTTP::Get.new(url)
    request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    
    response = http.request(request)
    puts response.read_body
    
    <?php
    $params = [
        'modules' => 'tasks',
    ];
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions" . "?" . http_build_query($params);
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_HTTPHEADER => [
        "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      ],
    ]);
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    echo $response;
    
    import requests
    
    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions"
    
    params = {
        "modules": "tasks"
    }
    
    headers = {
        "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    }
    
    response = requests.get(url, headers=headers, params=params)
    
    print(response.json())
    
    #include <stdio.h>
    #include <string.h>
    #include <curl/curl.h>
    
    int main(void) {
        CURL *curl = curl_easy_init();
        if (curl) {
            char *enc_modules = curl_easy_escape(curl, "tasks", 0);
            char url[2048];
            snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions?modules=%s", enc_modules);
    
            struct curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
            curl_easy_setopt(curl, CURLOPT_URL, url);
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
    
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK)
                fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
    
            curl_free(enc_modules);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    using System.Net.Http;
    using System.Text;
    using System.Web;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    var query = HttpUtility.ParseQueryString(string.Empty);
    query["modules"] = "tasks";
    var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions") { Query = query.ToString() };
    var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
    
    var response = await client.SendAsync(request);
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
        output->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    int main() {
        CURL* curl = curl_easy_init();
        if (curl) {
            std::string response;
            char* enc_modules = curl_easy_escape(curl, "tasks", 0);
            std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions";
            url += "?modules=" + std::string(enc_modules);
    
            struct curl_slist* headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
    
            CURLcode res = curl_easy_perform(curl);
            if (res == CURLE_OK)
                std::cout << response << std::endl;
            else
                std::cerr << curl_easy_strerror(res) << std::endl;
    
            curl_free(enc_modules);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    (require '[clj-http.client :as client])
    
    (let [enc-modules (java.net.URLEncoder/encode "tasks" "UTF-8")
          url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions" "?modules=" enc-modules)]
    (def response
      (client/get url
        {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
         :as :json}))
    
    (println (:body response))
    
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "net/url"
    )
    
    func main() {
        req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions", nil)
        q := req.URL.Query()
        q.Add("modules", "tasks")
        req.URL.RawQuery = q.Encode()
        req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    
        resp, _ := http.DefaultClient.Do(req)
        defer resp.Body.Close()
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    
    GET https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions?modules=tasks HTTP/1.1
    Host: projectsapi.zoho.com
    Authorization: Bearer 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]/fields/permissions");
    uriBuilder.addParameter("modules", "tasks");
    HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
    requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    HttpResponse response = httpclient.execute(requestObj);
    
    HttpEntity responseEntity = response.getEntity();
    Object responseObject = EntityUtils.toString(responseEntity);
    String responseString = responseObject.toString();
    
    const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions';
    
    const params = new URLSearchParams({
      'modules': 'tasks'
    });
    
    const options = {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
      }
    };
    
    fetch(url + '?' + params.toString(), options)
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
    modules = "tasks"
    import java.net.HttpURLConnection
    import java.net.URL
    import okhttp3.HttpUrl.Companion.toHttpUrl
    
    fun main() {
        val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions".toHttpUrl().newBuilder()
        urlBuilder.addQueryParameter("modules", "tasks")
        val url = URL(urlBuilder.build().toString())
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "GET"
        conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    
        val response = conn.inputStream.bufferedReader().readText()
        println(response)
    }
    
    NSString *encodedModules = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions?modules=%@", encodedModules];
    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@", result);
    }];
    [task resume];
    
    open Lwt
    open Cohttp_lwt_unix
    
    let () =
      let enc_modules = Uri.pct_encode "tasks" in
      let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions" ^ "?modules=" ^ enc_modules) in
      let headers = Cohttp.Header.init ()
        |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      in
      Lwt_main.run (
        Client.get ~headers uri >>= fun (_, body) ->
        Cohttp_lwt.Body.to_string body >|= fun s ->
        print_endline s)
    
    $headers = @{
        "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    }
    
    $params = @{
        modules = "tasks"
    }
    $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions" + "?" + $queryString
    
    $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
    
    $response | ConvertTo-Json
    
    library(httr)
    
    url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions"
    
    params <- list(
      modules = "tasks"
    )
    
    response <- GET(
      url,
      add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
      query = params
    )
    
    content(response, "text")
    
    import Foundation
    
    var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions")!
    components.queryItems = [
        URLQueryItem(name: "modules", value: "tasks")
    ]
    let url = components.url!
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
    
    let semaphore = DispatchSemaphore(value: 0)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data, let result = String(data: data, encoding: .utf8) {
            print(result)
        }
        semaphore.signal()
    }
    task.resume()
    semaphore.wait()
    

    Sample Input

    modules : "tasks"

    Sample Response

    200[ { "module" : "tasks", "module_display_name" : "Task", "field_id" : "4000000000173", "actions" : [ "pickup", "assign" ], "is_hidden" : true, "module_id" : "4000000000146", "key_ref" : "tasks.group_name", "display_name" : "Associated Team", "field_category" : "default", "field_type" : "team_picklist", "module_type" : "default" } ]
    Get Field Permission for Profiles

    Retrieve field permission details of multiple profiles.

    GET

    /api/v3/portal/[PORTALID]/profiles/fields/permissions

    OAuth Scope:

    ZohoProjects.portals.READ

    Query Parameter

    Param Name
    Data Type
    Description
    profile_ids

    String

    required

    Enter the profile IDs.

    modules

    String

    required

    Enter the module name.

    Request Example

    Request Example cURL
    • cURL
    • Deluge
    • Node.js
    • Ruby
    • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • JSON
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

    curl -X GET \
    'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions?profile_ids=170876000004602137&modules=tasks' \
    -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions";
    params = Map();
    params.put("profile_ids", "170876000004602137");
    params.put("modules", "tasks");
    response = invokeUrl
    [
        url: url
        type: GET
        parameters: params
        connection: "projects"
    ];
    info response;
    
    const https = require('https');
    const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions');
    url.searchParams.append('profile_ids', '170876000004602137');
    url.searchParams.append('modules', 'tasks');
    
    const options = {
      hostname: url.hostname,
      path: url.pathname + url.search,
      method: 'GET',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
      }
    };
    
    const req = https.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => { data += chunk; });
      res.on('end', () => { console.log(JSON.parse(data)); });
    });
    
    req.on('error', (err) => { console.error(err); });
    req.end();
    
    require 'net/http'
    require 'uri'
    require 'json'
    
    url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions")
    params = {
      "profile_ids" => "170876000004602137",
      "modules" => "tasks"
    }
    url.query = URI.encode_www_form(params)
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    
    request = Net::HTTP::Get.new(url)
    request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    
    response = http.request(request)
    puts response.read_body
    
    <?php
    $params = [
        'profile_ids' => '170876000004602137',
        'modules' => 'tasks',
    ];
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions" . "?" . http_build_query($params);
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => "GET",
      CURLOPT_HTTPHEADER => [
        "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      ],
    ]);
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    echo $response;
    
    import requests
    
    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions"
    
    params = {
        "profile_ids": "170876000004602137",
        "modules": "tasks"
    }
    
    headers = {
        "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
    }
    
    response = requests.get(url, headers=headers, params=params)
    
    print(response.json())
    
    #include <stdio.h>
    #include <string.h>
    #include <curl/curl.h>
    
    int main(void) {
        CURL *curl = curl_easy_init();
        if (curl) {
            char *enc_profile_ids = curl_easy_escape(curl, "170876000004602137", 0);
            char *enc_modules = curl_easy_escape(curl, "tasks", 0);
            char url[2048];
            snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions?profile_ids=%s&modules=%s", enc_profile_ids, enc_modules);
    
            struct curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
            curl_easy_setopt(curl, CURLOPT_URL, url);
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
    
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK)
                fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
    
            curl_free(enc_profile_ids);
            curl_free(enc_modules);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    using System.Net.Http;
    using System.Text;
    using System.Web;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    var query = HttpUtility.ParseQueryString(string.Empty);
    query["profile_ids"] = "170876000004602137";
    query["modules"] = "tasks";
    var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions") { Query = query.ToString() };
    var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
    
    var response = await client.SendAsync(request);
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
        output->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    int main() {
        CURL* curl = curl_easy_init();
        if (curl) {
            std::string response;
            char* enc_profile_ids = curl_easy_escape(curl, "170876000004602137", 0);
            char* enc_modules = curl_easy_escape(curl, "tasks", 0);
            std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions";
            url += "?profile_ids=" + std::string(enc_profile_ids);
            url += "&modules=" + std::string(enc_modules);
    
            struct curl_slist* headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
            curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
    
            CURLcode res = curl_easy_perform(curl);
            if (res == CURLE_OK)
                std::cout << response << std::endl;
            else
                std::cerr << curl_easy_strerror(res) << std::endl;
    
            curl_free(enc_profile_ids);
            curl_free(enc_modules);
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    (require '[clj-http.client :as client])
    
    (let [enc-profile_ids (java.net.URLEncoder/encode "170876000004602137" "UTF-8")
          enc-modules (java.net.URLEncoder/encode "tasks" "UTF-8")
          url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions" "?profile_ids=" enc-profile_ids "&modules=" enc-modules)]
    (def response
      (client/get url
        {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
         :as :json}))
    
    (println (:body response))
    
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "net/url"
    )
    
    func main() {
        req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions", nil)
        q := req.URL.Query()
        q.Add("profile_ids", "170876000004602137")
        q.Add("modules", "tasks")
        req.URL.RawQuery = q.Encode()
        req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    
        resp, _ := http.DefaultClient.Do(req)
        defer resp.Body.Close()
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    
    GET https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions?profile_ids=170876000004602137&modules=tasks HTTP/1.1
    Host: projectsapi.zoho.com
    Authorization: Bearer 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/fields/permissions");
    uriBuilder.addParameter("profile_ids", "170876000004602137");
    uriBuilder.addParameter("modules", "tasks");
    HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
    requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    HttpResponse response = httpclient.execute(requestObj);
    
    HttpEntity responseEntity = response.getEntity();
    Object responseObject = EntityUtils.toString(responseEntity);
    String responseString = responseObject.toString();
    
    const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions';
    
    const params = new URLSearchParams({
      'profile_ids': '170876000004602137',
      'modules': 'tasks'
    });
    
    const options = {
      method: 'GET',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
      }
    };
    
    fetch(url + '?' + params.toString(), options)
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
    profile_ids = "170876000004602137"
    modules = "tasks"
    import java.net.HttpURLConnection
    import java.net.URL
    import okhttp3.HttpUrl.Companion.toHttpUrl
    
    fun main() {
        val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions".toHttpUrl().newBuilder()
        urlBuilder.addQueryParameter("profile_ids", "170876000004602137")
        urlBuilder.addQueryParameter("modules", "tasks")
        val url = URL(urlBuilder.build().toString())
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "GET"
        conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
    
        val response = conn.inputStream.bufferedReader().readText()
        println(response)
    }
    
    NSString *encodedProfile_ids = [@"170876000004602137" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSString *encodedModules = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
    NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions?profile_ids=%@&modules=%@", encodedProfile_ids, encodedModules];
    NSURL *url = [NSURL URLWithString:urlString];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"GET"];
    [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@", result);
    }];
    [task resume];
    
    open Lwt
    open Cohttp_lwt_unix
    
    let () =
      let enc_profile_ids = Uri.pct_encode "170876000004602137" in
      let enc_modules = Uri.pct_encode "tasks" in
      let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions" ^ "?profile_ids=" ^ enc_profile_ids ^ "&modules=" ^ enc_modules) in
      let headers = Cohttp.Header.init ()
        |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      in
      Lwt_main.run (
        Client.get ~headers uri >>= fun (_, body) ->
        Cohttp_lwt.Body.to_string body >|= fun s ->
        print_endline s)
    
    $headers = @{
        "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    }
    
    $params = @{
        profile_ids = "170876000004602137"
        modules = "tasks"
    }
    $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions" + "?" + $queryString
    
    $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
    
    $response | ConvertTo-Json
    
    library(httr)
    
    url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions"
    
    params <- list(
      profile_ids = "170876000004602137",
      modules = "tasks"
    )
    
    response <- GET(
      url,
      add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
      query = params
    )
    
    content(response, "text")
    
    import Foundation
    
    var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/fields/permissions")!
    components.queryItems = [
        URLQueryItem(name: "profile_ids", value: "170876000004602137"),
        URLQueryItem(name: "modules", value: "tasks")
    ]
    let url = components.url!
    var request = URLRequest(url: url)
    request.httpMethod = "GET"
    request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
    
    let semaphore = DispatchSemaphore(value: 0)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data, let result = String(data: data, encoding: .utf8) {
            print(result)
        }
        semaphore.signal()
    }
    task.resume()
    semaphore.wait()
    

    Sample Input

    profile_ids : "170876000004602137" modules : "tasks"

    Sample Response

    200{ "7000000000987" : [ { "module" : "tasks", "module_display_name" : "Task", "field_id" : "7000000000161", "actions" : [ "pickup", "assign" ], "project_id" : "7000044450605", "is_hidden" : true, "module_id" : "7000000000134", "key_ref" : "tasks.group_name", "display_name" : "zp.groups.associatedteams", "field_category" : "default", "field_type" : "team_picklist" } ] }
    Grant Access for a Profile

    Grant module permission for a profile.

    PATCH

    /api/v3/portal/[PORTALID]/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant

    OAuth Scope:

    ZohoProjects.portals.UPDATE

    Parameter

    Param Name
    Data Type
    Description
    module

    String

    required

    Enter the module name.

    actions

    JSONArray

    required

    Specify the permissions. E.g. view_related, create, edit_owned, delete_all.

    Request Example

    Request Example cURL
    • cURL
    • Deluge
    • Node.js
    • Ruby
    • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • JSON
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

    curl -X PATCH \
    'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant' \
    -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
    -H 'Content-Type: application/json' \
    -d '{"module":"task","actions":["create"]}'

    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant";
    params = Map();
    params.put("module", "task");
    params.put("actions", ["create"]);
    response = invokeUrl
    [
        url: url
        type: PATCH
        parameters: params.toString()
        connection: "projects"
    ];
    info response;
    
    const https = require('https');
    const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant');
    
    const payload = JSON.stringify({"module":"task","actions":["create"]});
    
    const options = {
      hostname: url.hostname,
      path: url.pathname + url.search,
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(payload)
      }
    };
    
    const req = https.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => { data += chunk; });
      res.on('end', () => { console.log(JSON.parse(data)); });
    });
    
    req.on('error', (err) => { console.error(err); });
    req.write(payload);
    req.end();
    
    require 'net/http'
    require 'uri'
    require 'json'
    
    url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant")
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    
    request = Net::HTTP::Patch.new(url)
    request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    request["Content-Type"] = "application/json"
    request.body = '{"module":"task","actions":["create"]}'
    
    response = http.request(request)
    puts response.read_body
    
    <?php
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant";
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => "PATCH",
      CURLOPT_POSTFIELDS => '{"module":"task","actions":["create"]}',
      CURLOPT_HTTPHEADER => [
        "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type: application/json"
      ],
    ]);
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    echo $response;
    
    import requests
    
    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant"
    
    headers = {
        "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type": "application/json",
    }
    
    payload = '{"module":"task","actions":["create"]}'
    
    response = requests.patch(url, headers=headers, data=payload)
    
    print(response.json())
    
    #include <stdio.h>
    #include <string.h>
    #include <curl/curl.h>
    
    int main(void) {
        CURL *curl = curl_easy_init();
        if (curl) {
            struct curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"]}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK)
                fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    using System.Net.Http;
    using System.Text;
    using System.Web;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant");
    request.Content = new StringContent(
        @"{""module"":""task"",""actions"":[""create""]}",
        Encoding.UTF8,
        "application/json"
    );
    
    var response = await client.SendAsync(request);
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
        output->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    int main() {
        CURL* curl = curl_easy_init();
        if (curl) {
            std::string response;
            struct curl_slist* headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"]}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res == CURLE_OK)
                std::cout << response << std::endl;
            else
                std::cerr << curl_easy_strerror(res) << std::endl;
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    (require '[clj-http.client :as client])
    
    (def response
      (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant"
        {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                    "Content-Type" "application/json"}
         :body "{\"module\":\"task\",\"actions\":[\"create\"]}"
         :as :json}))
    
    (println (:body response))
    
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "strings"
    )
    
    func main() {
        payload := strings.NewReader("{\"module\":\"task\",\"actions\":[\"create\"]}")
        req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant", payload)
        req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        req.Header.Add("Content-Type", "application/json")
    
        resp, _ := http.DefaultClient.Do(req)
        defer resp.Body.Close()
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    
    PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant HTTP/1.1
    Host: projectsapi.zoho.com
    Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
    Content-Type: application/json
    
    {"module":"task","actions":["create"]}
    
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    
    SSLContext sslContext = SSLContext.getDefault();
    SSLConnectionSocketFactory 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]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant");
    HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
    requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
    String requestBody = "{\"module\":\"task\",\"actions\":[\"create\"]}";
    requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
    
    HttpResponse response = httpclient.execute(requestObj);
    
    HttpEntity responseEntity = response.getEntity();
    Object responseObject = EntityUtils.toString(responseEntity);
    String responseString = responseObject.toString();
    
    const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant';
    
    const options = {
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({"module":"task","actions":["create"]})
    };
    
    fetch(url, options)
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
    {"module":"task","actions":["create"]}
    import java.net.HttpURLConnection
    import java.net.URL
    import okhttp3.HttpUrl.Companion.toHttpUrl
    
    fun main() {
        val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant")
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "PATCH"
        conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        conn.setRequestProperty("Content-Type", "application/json")
        conn.doOutput = true
        conn.outputStream.bufferedWriter().use { it.write("""{"module":"task","actions":["create"]}""") }
    
        val response = conn.inputStream.bufferedReader().readText()
        println(response)
    }
    
    NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"PATCH"];
    [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    NSData *body = [@"{\"module\":\"task\",\"actions\":[\"create\"]}" dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:body];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@", result);
    }];
    [task resume];
    
    open Lwt
    open Cohttp_lwt_unix
    
    let () =
      let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant" in
      let headers = Cohttp.Header.init ()
        |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
      in
      let body = Cohttp_lwt.Body.of_string {json|{"module":"task","actions":["create"]}|json} in
      Lwt_main.run (
        Client.patch ~headers ~body uri >>= fun (_, body) ->
        Cohttp_lwt.Body.to_string body >|= fun s ->
        print_endline s)
    
    $headers = @{
        "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        "Content-Type" = "application/json"
    }
    
    $body = @'
    {"module":"task","actions":["create"]}
    '@
    
    $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant" -Method PATCH -Headers $headers -Body $body
    
    $response | ConvertTo-Json
    
    library(httr)
    
    url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant"
    
    response <- PATCH(
      url,
      add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
      content_type_json(),
      body = "{\"module\":\"task\",\"actions\":[\"create\"]}"
    )
    
    content(response, "text")
    
    import Foundation
    
    let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/grant")!
    var request = URLRequest(url: url)
    request.httpMethod = "PATCH"
    request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.httpBody = """
    {"module":"task","actions":["create"]}
    """.data(using: .utf8)
    
    let semaphore = DispatchSemaphore(value: 0)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data, let result = String(data: data, encoding: .utf8) {
            print(result)
        }
        semaphore.signal()
    }
    task.resume()
    semaphore.wait()
    

    Sample Input

    Content-Type: application/json
    { "module" : "task", "actions" : [ "create" ] }

    Sample Response

    204 No Content{ "permissions" : [ { "module" : "task", "actions" : [ "view_related", "create", "edit_owned", "delete_owned", "blueprintview" ] }, { "module" : "tasklist", "actions" : [ "view" ] }, { "module" : "milestone", "actions" : [ "view", "create", "delete_all" ] }, { "module" : "issue", "actions" : [ "view_all", "create", "edit_all", "delete_all", "follower" ] }, { "module" : "timesheet", "actions" : [ "view_all", "create_all", "edit_all", "delete_all", "approve" ] }, { "module" : "timeloggroup", "actions" : [ "view_all", "create", "edit", "delete_all", "approve" ] }, { "module" : "status", "actions" : [ "view", "create", "edit_owned", "delete_owned" ] } ], "profile" : { "is_primary" : true, "name" : "Manager", "id" : "170876000004602140", "type" : "6", "is_default" : true } }
    Grant Field Access for a Profile

    Grant module field permission for a profile.

    PATCH

    /api/v3/portal/[PORTALID]/profiles/[PROFILEID]/fields/permissions/grant

    OAuth Scope:

    ZohoProjects.portals.UPDATE

    Parameter

    Param Name
    Data Type
    Description
    module

    String

    required

    Enter the module name.

    actions

    JSONArray

    required

    Specify the permissions. E.g. view_related, create, edit_owned, delete_all.

    field_id

    long

    required

    Enter the field ID.

    Request Example

    Request Example cURL
    • cURL
    • Deluge
    • Node.js
    • Ruby
    • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • JSON
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

    curl -X PATCH \
    'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant' \
    -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
    -H 'Content-Type: application/json' \
    -d '{"module":"task","actions":["create"],"field_id":"12456890009"}'

    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant";
    params = Map();
    params.put("module", "task");
    params.put("actions", ["create"]);
    params.put("field_id", "12456890009");
    response = invokeUrl
    [
        url: url
        type: PATCH
        parameters: params.toString()
        connection: "projects"
    ];
    info response;
    
    const https = require('https');
    const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant');
    
    const payload = JSON.stringify({"module":"task","actions":["create"],"field_id":"12456890009"});
    
    const options = {
      hostname: url.hostname,
      path: url.pathname + url.search,
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(payload)
      }
    };
    
    const req = https.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => { data += chunk; });
      res.on('end', () => { console.log(JSON.parse(data)); });
    });
    
    req.on('error', (err) => { console.error(err); });
    req.write(payload);
    req.end();
    
    require 'net/http'
    require 'uri'
    require 'json'
    
    url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant")
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    
    request = Net::HTTP::Patch.new(url)
    request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    request["Content-Type"] = "application/json"
    request.body = '{"module":"task","actions":["create"],"field_id":"12456890009"}'
    
    response = http.request(request)
    puts response.read_body
    
    <?php
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant";
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => "PATCH",
      CURLOPT_POSTFIELDS => '{"module":"task","actions":["create"],"field_id":"12456890009"}',
      CURLOPT_HTTPHEADER => [
        "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type: application/json"
      ],
    ]);
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    echo $response;
    
    import requests
    
    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant"
    
    headers = {
        "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type": "application/json",
    }
    
    payload = '{"module":"task","actions":["create"],"field_id":"12456890009"}'
    
    response = requests.patch(url, headers=headers, data=payload)
    
    print(response.json())
    
    #include <stdio.h>
    #include <string.h>
    #include <curl/curl.h>
    
    int main(void) {
        CURL *curl = curl_easy_init();
        if (curl) {
            struct curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK)
                fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    using System.Net.Http;
    using System.Text;
    using System.Web;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant");
    request.Content = new StringContent(
        @"{""module"":""task"",""actions"":[""create""],""field_id"":""12456890009""}",
        Encoding.UTF8,
        "application/json"
    );
    
    var response = await client.SendAsync(request);
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
        output->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    int main() {
        CURL* curl = curl_easy_init();
        if (curl) {
            std::string response;
            struct curl_slist* headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res == CURLE_OK)
                std::cout << response << std::endl;
            else
                std::cerr << curl_easy_strerror(res) << std::endl;
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    (require '[clj-http.client :as client])
    
    (def response
      (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant"
        {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                    "Content-Type" "application/json"}
         :body "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}"
         :as :json}))
    
    (println (:body response))
    
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "strings"
    )
    
    func main() {
        payload := strings.NewReader("{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}")
        req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant", payload)
        req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        req.Header.Add("Content-Type", "application/json")
    
        resp, _ := http.DefaultClient.Do(req)
        defer resp.Body.Close()
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    
    PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant HTTP/1.1
    Host: projectsapi.zoho.com
    Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
    Content-Type: application/json
    
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    
    SSLContext sslContext = SSLContext.getDefault();
    SSLConnectionSocketFactory 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]/fields/permissions/grant");
    HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
    requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
    String requestBody = "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}";
    requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
    
    HttpResponse response = httpclient.execute(requestObj);
    
    HttpEntity responseEntity = response.getEntity();
    Object responseObject = EntityUtils.toString(responseEntity);
    String responseString = responseObject.toString();
    
    const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant';
    
    const options = {
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({"module":"task","actions":["create"],"field_id":"12456890009"})
    };
    
    fetch(url, options)
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    import java.net.HttpURLConnection
    import java.net.URL
    import okhttp3.HttpUrl.Companion.toHttpUrl
    
    fun main() {
        val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant")
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "PATCH"
        conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        conn.setRequestProperty("Content-Type", "application/json")
        conn.doOutput = true
        conn.outputStream.bufferedWriter().use { it.write("""{"module":"task","actions":["create"],"field_id":"12456890009"}""") }
    
        val response = conn.inputStream.bufferedReader().readText()
        println(response)
    }
    
    NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"PATCH"];
    [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    NSData *body = [@"{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}" dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:body];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@", result);
    }];
    [task resume];
    
    open Lwt
    open Cohttp_lwt_unix
    
    let () =
      let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant" in
      let headers = Cohttp.Header.init ()
        |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
      in
      let body = Cohttp_lwt.Body.of_string {json|{"module":"task","actions":["create"],"field_id":"12456890009"}|json} in
      Lwt_main.run (
        Client.patch ~headers ~body uri >>= fun (_, body) ->
        Cohttp_lwt.Body.to_string body >|= fun s ->
        print_endline s)
    
    $headers = @{
        "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        "Content-Type" = "application/json"
    }
    
    $body = @'
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    '@
    
    $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant" -Method PATCH -Headers $headers -Body $body
    
    $response | ConvertTo-Json
    
    library(httr)
    
    url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant"
    
    response <- PATCH(
      url,
      add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
      content_type_json(),
      body = "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}"
    )
    
    content(response, "text")
    
    import Foundation
    
    let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/grant")!
    var request = URLRequest(url: url)
    request.httpMethod = "PATCH"
    request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.httpBody = """
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    """.data(using: .utf8)
    
    let semaphore = DispatchSemaphore(value: 0)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data, let result = String(data: data, encoding: .utf8) {
            print(result)
        }
        semaphore.signal()
    }
    task.resume()
    semaphore.wait()
    

    Sample Input

    Content-Type: application/json
    { "module" : "task", "actions" : [ "create" ], "field_id" : "12456890009" }

    Sample Response

    204 No Content{ "permissions" : [ { "field_id" : "170876000004678000", "module_id" : "170876000004668005", "module_type" : "default", "api_name" : "owner", "field_category" : "default", "module" : "tasks", "is_hidden" : false, "key_ref" : "tasks.loginname", "display_name" : "Assign Task", "module_display_name" : "Task", "actions" : [ "pickup", "assign" ], "field_type" : "userpicklist" }, { "field_id" : "170876000004678003", "module_id" : "170876000004668008", "module_type" : "default", "api_name" : "status", "field_category" : "default", "module" : "tasks", "key_ref" : "taskmodule.status", "display_name" : "Status", "module_display_name" : "Task", "actions" : [ "edit", "create", "view" ], "field_type" : "picklist" }, { "field_id" : "170876000004678004", "module_id" : "170876000005348005", "module_type" : "default", "api_name" : "start_date", "field_category" : "default", "module" : "tasks", "is_hidden" : false, "key_ref" : "taskmodule.due_date", "display_name" : "Start Date, End Date, and Duration", "module_display_name" : "Task", "actions" : [ "edit", "create", "view" ], "field_type" : "date" }, { "field_id" : "170876000004678005", "module_id" : "170876000008808001", "module_type" : "default", "api_name" : "end_date", "field_category" : "default", "module" : "tasks", "is_hidden" : true, "key_ref" : "taskmodule.end_date", "display_name" : "Due Date", "module_display_name" : "Task", "actions" : [ "edit", "create", "view" ], "field_type" : "date" } ], "profile" : { "is_primary" : true, "name" : "Manager", "id" : "170876000004602140", "type" : "6", "is_default" : true } }
    Revoke Access for a Profile

    Remove module permissions for a profile.

    PATCH

    /api/v3/portal/[PORTALID]/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke

    OAuth Scope:

    ZohoProjects.portals.UPDATE

    Parameter

    Param Name
    Data Type
    Description
    module

    String

    required

    Enter the module name.

    actions

    JSONArray

    required

    Specify the permissions. E.g. view_related, create, edit_owned, delete_all.

    Request Example

    Request Example cURL
    • cURL
    • Deluge
    • Node.js
    • Ruby
    • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • JSON
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

    curl -X PATCH \
    'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke' \
    -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
    -H 'Content-Type: application/json' \
    -d '{"module":"task","actions":["create"]}'

    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke";
    params = Map();
    params.put("module", "task");
    params.put("actions", ["create"]);
    response = invokeUrl
    [
        url: url
        type: PATCH
        parameters: params.toString()
        connection: "projects"
    ];
    info response;
    
    const https = require('https');
    const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke');
    
    const payload = JSON.stringify({"module":"task","actions":["create"]});
    
    const options = {
      hostname: url.hostname,
      path: url.pathname + url.search,
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(payload)
      }
    };
    
    const req = https.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => { data += chunk; });
      res.on('end', () => { console.log(JSON.parse(data)); });
    });
    
    req.on('error', (err) => { console.error(err); });
    req.write(payload);
    req.end();
    
    require 'net/http'
    require 'uri'
    require 'json'
    
    url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke")
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    
    request = Net::HTTP::Patch.new(url)
    request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    request["Content-Type"] = "application/json"
    request.body = '{"module":"task","actions":["create"]}'
    
    response = http.request(request)
    puts response.read_body
    
    <?php
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke";
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => "PATCH",
      CURLOPT_POSTFIELDS => '{"module":"task","actions":["create"]}',
      CURLOPT_HTTPHEADER => [
        "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type: application/json"
      ],
    ]);
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    echo $response;
    
    import requests
    
    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke"
    
    headers = {
        "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type": "application/json",
    }
    
    payload = '{"module":"task","actions":["create"]}'
    
    response = requests.patch(url, headers=headers, data=payload)
    
    print(response.json())
    
    #include <stdio.h>
    #include <string.h>
    #include <curl/curl.h>
    
    int main(void) {
        CURL *curl = curl_easy_init();
        if (curl) {
            struct curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"]}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK)
                fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    using System.Net.Http;
    using System.Text;
    using System.Web;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke");
    request.Content = new StringContent(
        @"{""module"":""task"",""actions"":[""create""]}",
        Encoding.UTF8,
        "application/json"
    );
    
    var response = await client.SendAsync(request);
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
        output->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    int main() {
        CURL* curl = curl_easy_init();
        if (curl) {
            std::string response;
            struct curl_slist* headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"]}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res == CURLE_OK)
                std::cout << response << std::endl;
            else
                std::cerr << curl_easy_strerror(res) << std::endl;
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    (require '[clj-http.client :as client])
    
    (def response
      (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke"
        {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                    "Content-Type" "application/json"}
         :body "{\"module\":\"task\",\"actions\":[\"create\"]}"
         :as :json}))
    
    (println (:body response))
    
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "strings"
    )
    
    func main() {
        payload := strings.NewReader("{\"module\":\"task\",\"actions\":[\"create\"]}")
        req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke", payload)
        req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        req.Header.Add("Content-Type", "application/json")
    
        resp, _ := http.DefaultClient.Do(req)
        defer resp.Body.Close()
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    
    PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke HTTP/1.1
    Host: projectsapi.zoho.com
    Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
    Content-Type: application/json
    
    {"module":"task","actions":["create"]}
    
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    
    SSLContext sslContext = SSLContext.getDefault();
    SSLConnectionSocketFactory 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]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke");
    HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
    requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
    String requestBody = "{\"module\":\"task\",\"actions\":[\"create\"]}";
    requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
    
    HttpResponse response = httpclient.execute(requestObj);
    
    HttpEntity responseEntity = response.getEntity();
    Object responseObject = EntityUtils.toString(responseEntity);
    String responseString = responseObject.toString();
    
    const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke';
    
    const options = {
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({"module":"task","actions":["create"]})
    };
    
    fetch(url, options)
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
    {"module":"task","actions":["create"]}
    import java.net.HttpURLConnection
    import java.net.URL
    import okhttp3.HttpUrl.Companion.toHttpUrl
    
    fun main() {
        val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke")
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "PATCH"
        conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        conn.setRequestProperty("Content-Type", "application/json")
        conn.doOutput = true
        conn.outputStream.bufferedWriter().use { it.write("""{"module":"task","actions":["create"]}""") }
    
        val response = conn.inputStream.bufferedReader().readText()
        println(response)
    }
    
    NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"PATCH"];
    [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    NSData *body = [@"{\"module\":\"task\",\"actions\":[\"create\"]}" dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:body];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@", result);
    }];
    [task resume];
    
    open Lwt
    open Cohttp_lwt_unix
    
    let () =
      let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke" in
      let headers = Cohttp.Header.init ()
        |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
      in
      let body = Cohttp_lwt.Body.of_string {json|{"module":"task","actions":["create"]}|json} in
      Lwt_main.run (
        Client.patch ~headers ~body uri >>= fun (_, body) ->
        Cohttp_lwt.Body.to_string body >|= fun s ->
        print_endline s)
    
    $headers = @{
        "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        "Content-Type" = "application/json"
    }
    
    $body = @'
    {"module":"task","actions":["create"]}
    '@
    
    $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke" -Method PATCH -Headers $headers -Body $body
    
    $response | ConvertTo-Json
    
    library(httr)
    
    url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke"
    
    response <- PATCH(
      url,
      add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
      content_type_json(),
      body = "{\"module\":\"task\",\"actions\":[\"create\"]}"
    )
    
    content(response, "text")
    
    import Foundation
    
    let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/[ records | others | portal | settings | integrations | custom | any ]/permissions/revoke")!
    var request = URLRequest(url: url)
    request.httpMethod = "PATCH"
    request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.httpBody = """
    {"module":"task","actions":["create"]}
    """.data(using: .utf8)
    
    let semaphore = DispatchSemaphore(value: 0)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data, let result = String(data: data, encoding: .utf8) {
            print(result)
        }
        semaphore.signal()
    }
    task.resume()
    semaphore.wait()
    

    Sample Input

    Content-Type: application/json
    { "module" : "task", "actions" : [ "create" ] }

    Sample Response

    204 No Content{ "permissions" : [ { "module" : "task", "actions" : [ "view_related", "edit_owned", "delete_owned", "blueprintview" ] }, { "module" : "tasklist", "actions" : [ "view" ] }, { "module" : "milestone", "actions" : [ "view", "create", "delete_all" ] }, { "module" : "issue", "actions" : [ "view_all", "create", "edit_all", "delete_all", "follower" ] }, { "module" : "timesheet", "actions" : [ "view_all", "create_all", "edit_all", "delete_all", "approve" ] } ], "profile" : { "is_primary" : true, "name" : "Manager", "id" : "170876000004602140", "type" : "6", "is_default" : true } }
    Revoke Field Access for a Profile

    Remove module field permission for a profile.

    PATCH

    /api/v3/portal/[PORTALID]/profiles/[PROFILEID]/fields/permissions/revoke

    OAuth Scope:

    ZohoProjects.portals.UPDATE

    Parameter

    Param Name
    Data Type
    Description
    module

    String

    required

    Enter the module name.

    actions

    JSONArray

    required

    Specify the permissions. E.g. view_related, create, edit_owned, delete_all.

    field_id

    long

    required

    Enter the field ID.

    Request Example

    Request Example cURL
    • cURL
    • Deluge
    • Node.js
    • Ruby
    • PHP
    • Python
    • C
    • C#
    • C++
    • Clojure
    • Go
    • HTTP
    • Java
    • JS Fetch
    • JSON
    • Kotlin
    • Objective-C
    • OCaml
    • PowerShell
    • R
    • Swift

    curl -X PATCH \
    'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke' \
    -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
    -H 'Content-Type: application/json' \
    -d '{"module":"task","actions":["create"],"field_id":"12456890009"}'

    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke";
    params = Map();
    params.put("module", "task");
    params.put("actions", ["create"]);
    params.put("field_id", "12456890009");
    response = invokeUrl
    [
        url: url
        type: PATCH
        parameters: params.toString()
        connection: "projects"
    ];
    info response;
    
    const https = require('https');
    const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke');
    
    const payload = JSON.stringify({"module":"task","actions":["create"],"field_id":"12456890009"});
    
    const options = {
      hostname: url.hostname,
      path: url.pathname + url.search,
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json',
        'Content-Length': Buffer.byteLength(payload)
      }
    };
    
    const req = https.request(options, (res) => {
      let data = '';
      res.on('data', (chunk) => { data += chunk; });
      res.on('end', () => { console.log(JSON.parse(data)); });
    });
    
    req.on('error', (err) => { console.error(err); });
    req.write(payload);
    req.end();
    
    require 'net/http'
    require 'uri'
    require 'json'
    
    url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke")
    
    http = Net::HTTP.new(url.host, url.port)
    http.use_ssl = true
    
    request = Net::HTTP::Patch.new(url)
    request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
    request["Content-Type"] = "application/json"
    request.body = '{"module":"task","actions":["create"],"field_id":"12456890009"}'
    
    response = http.request(request)
    puts response.read_body
    
    <?php
    $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke";
    
    $curl = curl_init();
    
    curl_setopt_array($curl, [
      CURLOPT_URL => $url,
      CURLOPT_RETURNTRANSFER => true,
      CURLOPT_CUSTOMREQUEST => "PATCH",
      CURLOPT_POSTFIELDS => '{"module":"task","actions":["create"],"field_id":"12456890009"}',
      CURLOPT_HTTPHEADER => [
        "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type: application/json"
      ],
    ]);
    
    $response = curl_exec($curl);
    curl_close($curl);
    
    echo $response;
    
    import requests
    
    url = "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke"
    
    headers = {
        "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        "Content-Type": "application/json",
    }
    
    payload = '{"module":"task","actions":["create"],"field_id":"12456890009"}'
    
    response = requests.patch(url, headers=headers, data=payload)
    
    print(response.json())
    
    #include <stdio.h>
    #include <string.h>
    #include <curl/curl.h>
    
    int main(void) {
        CURL *curl = curl_easy_init();
        if (curl) {
            struct curl_slist *headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res != CURLE_OK)
                fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    using System.Net.Http;
    using System.Text;
    using System.Web;
    
    var client = new HttpClient();
    client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke");
    request.Content = new StringContent(
        @"{""module"":""task"",""actions"":[""create""],""field_id"":""12456890009""}",
        Encoding.UTF8,
        "application/json"
    );
    
    var response = await client.SendAsync(request);
    var body = await response.Content.ReadAsStringAsync();
    Console.WriteLine(body);
    
    #include <iostream>
    #include <string>
    #include <curl/curl.h>
    
    static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
        output->append((char*)contents, size * nmemb);
        return size * nmemb;
    }
    
    int main() {
        CURL* curl = curl_easy_init();
        if (curl) {
            std::string response;
            struct curl_slist* headers = NULL;
            headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
            headers = curl_slist_append(headers, "Content-Type: application/json");
    
            curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke");
            curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
            curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
            curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
            curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
            curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}");
    
            CURLcode res = curl_easy_perform(curl);
            if (res == CURLE_OK)
                std::cout << response << std::endl;
            else
                std::cerr << curl_easy_strerror(res) << std::endl;
    
            curl_slist_free_all(headers);
            curl_easy_cleanup(curl);
        }
        return 0;
    }
    
    (require '[clj-http.client :as client])
    
    (def response
      (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke"
        {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                    "Content-Type" "application/json"}
         :body "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}"
         :as :json}))
    
    (println (:body response))
    
    package main
    
    import (
        "fmt"
        "io"
        "net/http"
        "strings"
    )
    
    func main() {
        payload := strings.NewReader("{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}")
        req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke", payload)
        req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        req.Header.Add("Content-Type", "application/json")
    
        resp, _ := http.DefaultClient.Do(req)
        defer resp.Body.Close()
        body, _ := io.ReadAll(resp.Body)
        fmt.Println(string(body))
    }
    
    PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke HTTP/1.1
    Host: projectsapi.zoho.com
    Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
    Content-Type: application/json
    
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    
    HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
    
    SSLContext sslContext = SSLContext.getDefault();
    SSLConnectionSocketFactory 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]/fields/permissions/revoke");
    HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
    requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
    
    HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
    String requestBody = "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}";
    requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
    
    HttpResponse response = httpclient.execute(requestObj);
    
    HttpEntity responseEntity = response.getEntity();
    Object responseObject = EntityUtils.toString(responseEntity);
    String responseString = responseObject.toString();
    
    const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke';
    
    const options = {
      method: 'PATCH',
      headers: {
        'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
        'Content-Type': 'application/json'
      },
      body: JSON.stringify({"module":"task","actions":["create"],"field_id":"12456890009"})
    };
    
    fetch(url, options)
      .then(response => response.json())
      .then(data => console.log(data))
      .catch(error => console.error(error));
    
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    import java.net.HttpURLConnection
    import java.net.URL
    import okhttp3.HttpUrl.Companion.toHttpUrl
    
    fun main() {
        val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke")
        val conn = url.openConnection() as HttpURLConnection
        conn.requestMethod = "PATCH"
        conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        conn.setRequestProperty("Content-Type", "application/json")
        conn.doOutput = true
        conn.outputStream.bufferedWriter().use { it.write("""{"module":"task","actions":["create"],"field_id":"12456890009"}""") }
    
        val response = conn.inputStream.bufferedReader().readText()
        println(response)
    }
    
    NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke"];
    NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
    [request setHTTPMethod:@"PATCH"];
    [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
    [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
    NSData *body = [@"{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}" dataUsingEncoding:NSUTF8StringEncoding];
    [request setHTTPBody:body];
    
    NSURLSession *session = [NSURLSession sharedSession];
    NSURLSessionDataTask *task = [session dataTaskWithRequest:request
        completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
            NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
            NSLog(@"%@", result);
    }];
    [task resume];
    
    open Lwt
    open Cohttp_lwt_unix
    
    let () =
      let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke" in
      let headers = Cohttp.Header.init ()
        |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
      in
      let body = Cohttp_lwt.Body.of_string {json|{"module":"task","actions":["create"],"field_id":"12456890009"}|json} in
      Lwt_main.run (
        Client.patch ~headers ~body uri >>= fun (_, body) ->
        Cohttp_lwt.Body.to_string body >|= fun s ->
        print_endline s)
    
    $headers = @{
        "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        "Content-Type" = "application/json"
    }
    
    $body = @'
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    '@
    
    $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke" -Method PATCH -Headers $headers -Body $body
    
    $response | ConvertTo-Json
    
    library(httr)
    
    url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke"
    
    response <- PATCH(
      url,
      add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
      content_type_json(),
      body = "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\"}"
    )
    
    content(response, "text")
    
    import Foundation
    
    let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/profiles/[PROFILEID]/fields/permissions/revoke")!
    var request = URLRequest(url: url)
    request.httpMethod = "PATCH"
    request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
    request.setValue("application/json", forHTTPHeaderField: "Content-Type")
    request.httpBody = """
    {"module":"task","actions":["create"],"field_id":"12456890009"}
    """.data(using: .utf8)
    
    let semaphore = DispatchSemaphore(value: 0)
    let task = URLSession.shared.dataTask(with: request) { data, response, error in
        if let data = data, let result = String(data: data, encoding: .utf8) {
            print(result)
        }
        semaphore.signal()
    }
    task.resume()
    semaphore.wait()
    

    Sample Input

    Content-Type: application/json
    { "module" : "task", "actions" : [ "create" ], "field_id" : "12456890009" }

    Sample Response

    204 No Content{ "permissions" : [ { "field_id" : "170876000004678000", "module_id" : "170876000004668005", "module_type" : "default", "api_name" : "owner", "field_category" : "default", "module" : "tasks", "is_hidden" : false, "key_ref" : "tasks.loginname", "display_name" : "Assign Task", "module_display_name" : "Task", "actions" : [ "assign" ], "field_type" : "userpicklist" }, { "field_id" : "170876000004678003", "module_id" : "170876000004668008", "module_type" : "default", "api_name" : "status", "field_category" : "default", "module" : "tasks", "key_ref" : "taskmodule.status", "display_name" : "Status", "module_display_name" : "Task", "actions" : [ "edit", "create", "view" ], "field_type" : "picklist" }, { "field_id" : "170876000004678004", "module_id" : "170876000005348005", "module_type" : "default", "api_name" : "start_date", "field_category" : "default", "module" : "tasks", "is_hidden" : false, "key_ref" : "taskmodule.due_date", "display_name" : "Start Date, End Date, and Duration", "module_display_name" : "Task", "actions" : [ "edit", "create", "view" ], "field_type" : "date" } ], "profile" : { "is_primary" : true, "name" : "Manager", "id" : "170876000004602140", "type" : "6", "is_default" : true } }
    User Permissions

    This module covers all operations related to user's permissions and access management within Zoho Projects.

    Get Permissions for User in Project

    Retrieve project permission details of the user.

    GET

    /api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ZPUID | EMAILID]/[ records | others | portal | settings | integrations | custom | any ]/permissions

    OAuth Scope:

    ZohoProjects.portals.READ

    Query Parameter

    Param Name
    Data Type
    Description

    Request Example

    Request Example cURL

      Sample Response

      200[ { "module" : "task", "actions" : [ "view_all", "create", "edit_all", "delete_all", "reorder", "follower", "blueprintview", "blueprintassociate" ] } ]
      Get Permissions for Users in Project

      Retrieve module permission details of a user in a project.

      GET

      /api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ records | others | portal | settings | integrations | custom | any ]/permissions

      OAuth Scope:

      ZohoProjects.portals.READ

      Query Parameter

      Param Name
      Data Type
      Description
      user_ids

      String

      Enter the user IDs.

      Request Example

      Request Example cURL
      • cURL
      • Deluge
      • Node.js
      • Ruby
      • PHP
      • Python
      • C
      • C#
      • C++
      • Clojure
      • Go
      • HTTP
      • Java
      • JS Fetch
      • JSON
      • Kotlin
      • Objective-C
      • OCaml
      • PowerShell
      • R
      • Swift

      curl -X GET \
      'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions?user_ids=1752587000000097260' \
      -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions";
      params = Map();
      params.put("user_ids", "1752587000000097260");
      response = invokeUrl
      [
          url: url
          type: GET
          parameters: params
          connection: "projects"
      ];
      info response;
      
      const https = require('https');
      const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions');
      url.searchParams.append('user_ids', '1752587000000097260');
      
      const options = {
        hostname: url.hostname,
        path: url.pathname + url.search,
        method: 'GET',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
        }
      };
      
      const req = https.request(options, (res) => {
        let data = '';
        res.on('data', (chunk) => { data += chunk; });
        res.on('end', () => { console.log(JSON.parse(data)); });
      });
      
      req.on('error', (err) => { console.error(err); });
      req.end();
      
      require 'net/http'
      require 'uri'
      require 'json'
      
      url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions")
      params = {
        "user_ids" => "1752587000000097260"
      }
      url.query = URI.encode_www_form(params)
      
      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true
      
      request = Net::HTTP::Get.new(url)
      request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      
      response = http.request(request)
      puts response.read_body
      
      <?php
      $params = [
          'user_ids' => '1752587000000097260',
      ];
      $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions" . "?" . http_build_query($params);
      
      $curl = curl_init();
      
      curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => [
          "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        ],
      ]);
      
      $response = curl_exec($curl);
      curl_close($curl);
      
      echo $response;
      
      import requests
      
      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions"
      
      params = {
          "user_ids": "1752587000000097260"
      }
      
      headers = {
          "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
      }
      
      response = requests.get(url, headers=headers, params=params)
      
      print(response.json())
      
      #include <stdio.h>
      #include <string.h>
      #include <curl/curl.h>
      
      int main(void) {
          CURL *curl = curl_easy_init();
          if (curl) {
              char *enc_user_ids = curl_easy_escape(curl, "1752587000000097260", 0);
              char url[2048];
              snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions?user_ids=%s", enc_user_ids);
      
              struct curl_slist *headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
              curl_easy_setopt(curl, CURLOPT_URL, url);
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
      
              CURLcode res = curl_easy_perform(curl);
              if (res != CURLE_OK)
                  fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
      
              curl_free(enc_user_ids);
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      using System.Net.Http;
      using System.Text;
      using System.Web;
      
      var client = new HttpClient();
      client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      var query = HttpUtility.ParseQueryString(string.Empty);
      query["user_ids"] = "1752587000000097260";
      var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions") { Query = query.ToString() };
      var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
      
      var response = await client.SendAsync(request);
      var body = await response.Content.ReadAsStringAsync();
      Console.WriteLine(body);
      
      #include <iostream>
      #include <string>
      #include <curl/curl.h>
      
      static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
          output->append((char*)contents, size * nmemb);
          return size * nmemb;
      }
      
      int main() {
          CURL* curl = curl_easy_init();
          if (curl) {
              std::string response;
              char* enc_user_ids = curl_easy_escape(curl, "1752587000000097260", 0);
              std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions";
              url += "?user_ids=" + std::string(enc_user_ids);
      
              struct curl_slist* headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
              curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
              curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
              curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
      
              CURLcode res = curl_easy_perform(curl);
              if (res == CURLE_OK)
                  std::cout << response << std::endl;
              else
                  std::cerr << curl_easy_strerror(res) << std::endl;
      
              curl_free(enc_user_ids);
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      (require '[clj-http.client :as client])
      
      (let [enc-user_ids (java.net.URLEncoder/encode "1752587000000097260" "UTF-8")
            url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions" "?user_ids=" enc-user_ids)]
      (def response
        (client/get url
          {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
           :as :json}))
      
      (println (:body response))
      
      package main
      
      import (
          "fmt"
          "io"
          "net/http"
          "net/url"
      )
      
      func main() {
          req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions", nil)
          q := req.URL.Query()
          q.Add("user_ids", "1752587000000097260")
          req.URL.RawQuery = q.Encode()
          req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
      
          resp, _ := http.DefaultClient.Do(req)
          defer resp.Body.Close()
          body, _ := io.ReadAll(resp.Body)
          fmt.Println(string(body))
      }
      
      GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions?user_ids=1752587000000097260 HTTP/1.1
      Host: projectsapi.zoho.com
      Authorization: Bearer 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/[ records | others | portal | settings | integrations | custom | any ]/permissions");
      uriBuilder.addParameter("user_ids", "1752587000000097260");
      HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
      requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      HttpResponse response = httpclient.execute(requestObj);
      
      HttpEntity responseEntity = response.getEntity();
      Object responseObject = EntityUtils.toString(responseEntity);
      String responseString = responseObject.toString();
      
      const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions';
      
      const params = new URLSearchParams({
        'user_ids': '1752587000000097260'
      });
      
      const options = {
        method: 'GET',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
        }
      };
      
      fetch(url + '?' + params.toString(), options)
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error(error));
      
      user_ids = "1752587000000097260"
      
      import java.net.HttpURLConnection
      import java.net.URL
      import okhttp3.HttpUrl.Companion.toHttpUrl
      
      fun main() {
          val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions".toHttpUrl().newBuilder()
          urlBuilder.addQueryParameter("user_ids", "1752587000000097260")
          val url = URL(urlBuilder.build().toString())
          val conn = url.openConnection() as HttpURLConnection
          conn.requestMethod = "GET"
          conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
      
          val response = conn.inputStream.bufferedReader().readText()
          println(response)
      }
      
      NSString *encodedUser_ids = [@"1752587000000097260" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
      NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions?user_ids=%@", encodedUser_ids];
      NSURL *url = [NSURL URLWithString:urlString];
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
      [request setHTTPMethod:@"GET"];
      [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
      
      NSURLSession *session = [NSURLSession sharedSession];
      NSURLSessionDataTask *task = [session dataTaskWithRequest:request
          completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
              NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
              NSLog(@"%@", result);
      }];
      [task resume];
      
      open Lwt
      open Cohttp_lwt_unix
      
      let () =
        let enc_user_ids = Uri.pct_encode "1752587000000097260" in
        let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions" ^ "?user_ids=" ^ enc_user_ids) in
        let headers = Cohttp.Header.init ()
          |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        in
        Lwt_main.run (
          Client.get ~headers uri >>= fun (_, body) ->
          Cohttp_lwt.Body.to_string body >|= fun s ->
          print_endline s)
      
      $headers = @{
          "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      }
      
      $params = @{
          user_ids = "1752587000000097260"
      }
      $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
      $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions" + "?" + $queryString
      
      $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
      
      $response | ConvertTo-Json
      
      library(httr)
      
      url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions"
      
      params <- list(
        user_ids = "1752587000000097260"
      )
      
      response <- GET(
        url,
        add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
        query = params
      )
      
      content(response, "text")
      
      import Foundation
      
      var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ records | others | portal | settings | integrations | custom | any ]/permissions")!
      components.queryItems = [
          URLQueryItem(name: "user_ids", value: "1752587000000097260")
      ]
      let url = components.url!
      var request = URLRequest(url: url)
      request.httpMethod = "GET"
      request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
      
      let semaphore = DispatchSemaphore(value: 0)
      let task = URLSession.shared.dataTask(with: request) { data, response, error in
          if let data = data, let result = String(data: data, encoding: .utf8) {
              print(result)
          }
          semaphore.signal()
      }
      task.resume()
      semaphore.wait()
      

      Sample Input

      user_ids : "1752587000000097260"

      Sample Response

      200{ "1752587000000097260" : [ { "zpuid" : "1752587000000097260", "module" : "task", "actions" : [ "view_all", "create", "edit_all", "delete_all", "reorder", "follower", "blueprintview", "blueprintassociate" ], "project_id" : "7000044450605" } ] }
      Get Field Permissions for a User in Project

      Retrieve field permission details of a user in a project.

      GET

      /api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ZPUID | EMAILID]/fields/permissions

      OAuth Scope:

      ZohoProjects.portals.READ

      Query Parameter

      Param Name
      Data Type
      Description
      modules

      String

      required

      Enter the module name.

      Request Example

      Request Example cURL
      • cURL
      • Deluge
      • Node.js
      • Ruby
      • PHP
      • Python
      • C
      • C#
      • C++
      • Clojure
      • Go
      • HTTP
      • Java
      • JS Fetch
      • JSON
      • Kotlin
      • Objective-C
      • OCaml
      • PowerShell
      • R
      • Swift

      curl -X GET \
      'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions?modules=tasks' \
      -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions";
      params = Map();
      params.put("modules", "tasks");
      response = invokeUrl
      [
          url: url
          type: GET
          parameters: params
          connection: "projects"
      ];
      info response;
      
      const https = require('https');
      const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions');
      url.searchParams.append('modules', 'tasks');
      
      const options = {
        hostname: url.hostname,
        path: url.pathname + url.search,
        method: 'GET',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
        }
      };
      
      const req = https.request(options, (res) => {
        let data = '';
        res.on('data', (chunk) => { data += chunk; });
        res.on('end', () => { console.log(JSON.parse(data)); });
      });
      
      req.on('error', (err) => { console.error(err); });
      req.end();
      
      require 'net/http'
      require 'uri'
      require 'json'
      
      url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions")
      params = {
        "modules" => "tasks"
      }
      url.query = URI.encode_www_form(params)
      
      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true
      
      request = Net::HTTP::Get.new(url)
      request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      
      response = http.request(request)
      puts response.read_body
      
      <?php
      $params = [
          'modules' => 'tasks',
      ];
      $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions" . "?" . http_build_query($params);
      
      $curl = curl_init();
      
      curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => [
          "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        ],
      ]);
      
      $response = curl_exec($curl);
      curl_close($curl);
      
      echo $response;
      
      import requests
      
      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions"
      
      params = {
          "modules": "tasks"
      }
      
      headers = {
          "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
      }
      
      response = requests.get(url, headers=headers, params=params)
      
      print(response.json())
      
      #include <stdio.h>
      #include <string.h>
      #include <curl/curl.h>
      
      int main(void) {
          CURL *curl = curl_easy_init();
          if (curl) {
              char *enc_modules = curl_easy_escape(curl, "tasks", 0);
              char url[2048];
              snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions?modules=%s", enc_modules);
      
              struct curl_slist *headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
              curl_easy_setopt(curl, CURLOPT_URL, url);
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
      
              CURLcode res = curl_easy_perform(curl);
              if (res != CURLE_OK)
                  fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
      
              curl_free(enc_modules);
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      using System.Net.Http;
      using System.Text;
      using System.Web;
      
      var client = new HttpClient();
      client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      var query = HttpUtility.ParseQueryString(string.Empty);
      query["modules"] = "tasks";
      var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions") { Query = query.ToString() };
      var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
      
      var response = await client.SendAsync(request);
      var body = await response.Content.ReadAsStringAsync();
      Console.WriteLine(body);
      
      #include <iostream>
      #include <string>
      #include <curl/curl.h>
      
      static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
          output->append((char*)contents, size * nmemb);
          return size * nmemb;
      }
      
      int main() {
          CURL* curl = curl_easy_init();
          if (curl) {
              std::string response;
              char* enc_modules = curl_easy_escape(curl, "tasks", 0);
              std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions";
              url += "?modules=" + std::string(enc_modules);
      
              struct curl_slist* headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
              curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
              curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
              curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
      
              CURLcode res = curl_easy_perform(curl);
              if (res == CURLE_OK)
                  std::cout << response << std::endl;
              else
                  std::cerr << curl_easy_strerror(res) << std::endl;
      
              curl_free(enc_modules);
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      (require '[clj-http.client :as client])
      
      (let [enc-modules (java.net.URLEncoder/encode "tasks" "UTF-8")
            url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions" "?modules=" enc-modules)]
      (def response
        (client/get url
          {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
           :as :json}))
      
      (println (:body response))
      
      package main
      
      import (
          "fmt"
          "io"
          "net/http"
          "net/url"
      )
      
      func main() {
          req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions", nil)
          q := req.URL.Query()
          q.Add("modules", "tasks")
          req.URL.RawQuery = q.Encode()
          req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
      
          resp, _ := http.DefaultClient.Do(req)
          defer resp.Body.Close()
          body, _ := io.ReadAll(resp.Body)
          fmt.Println(string(body))
      }
      
      GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions?modules=tasks HTTP/1.1
      Host: projectsapi.zoho.com
      Authorization: Bearer 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]/fields/permissions");
      uriBuilder.addParameter("modules", "tasks");
      HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
      requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      HttpResponse response = httpclient.execute(requestObj);
      
      HttpEntity responseEntity = response.getEntity();
      Object responseObject = EntityUtils.toString(responseEntity);
      String responseString = responseObject.toString();
      
      const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions';
      
      const params = new URLSearchParams({
        'modules': 'tasks'
      });
      
      const options = {
        method: 'GET',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
        }
      };
      
      fetch(url + '?' + params.toString(), options)
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error(error));
      
      modules = "tasks"
      import java.net.HttpURLConnection
      import java.net.URL
      import okhttp3.HttpUrl.Companion.toHttpUrl
      
      fun main() {
          val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions".toHttpUrl().newBuilder()
          urlBuilder.addQueryParameter("modules", "tasks")
          val url = URL(urlBuilder.build().toString())
          val conn = url.openConnection() as HttpURLConnection
          conn.requestMethod = "GET"
          conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
      
          val response = conn.inputStream.bufferedReader().readText()
          println(response)
      }
      
      NSString *encodedModules = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
      NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions?modules=%@", encodedModules];
      NSURL *url = [NSURL URLWithString:urlString];
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
      [request setHTTPMethod:@"GET"];
      [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
      
      NSURLSession *session = [NSURLSession sharedSession];
      NSURLSessionDataTask *task = [session dataTaskWithRequest:request
          completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
              NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
              NSLog(@"%@", result);
      }];
      [task resume];
      
      open Lwt
      open Cohttp_lwt_unix
      
      let () =
        let enc_modules = Uri.pct_encode "tasks" in
        let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions" ^ "?modules=" ^ enc_modules) in
        let headers = Cohttp.Header.init ()
          |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        in
        Lwt_main.run (
          Client.get ~headers uri >>= fun (_, body) ->
          Cohttp_lwt.Body.to_string body >|= fun s ->
          print_endline s)
      
      $headers = @{
          "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      }
      
      $params = @{
          modules = "tasks"
      }
      $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
      $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions" + "?" + $queryString
      
      $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
      
      $response | ConvertTo-Json
      
      library(httr)
      
      url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions"
      
      params <- list(
        modules = "tasks"
      )
      
      response <- GET(
        url,
        add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
        query = params
      )
      
      content(response, "text")
      
      import Foundation
      
      var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/fields/permissions")!
      components.queryItems = [
          URLQueryItem(name: "modules", value: "tasks")
      ]
      let url = components.url!
      var request = URLRequest(url: url)
      request.httpMethod = "GET"
      request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
      
      let semaphore = DispatchSemaphore(value: 0)
      let task = URLSession.shared.dataTask(with: request) { data, response, error in
          if let data = data, let result = String(data: data, encoding: .utf8) {
              print(result)
          }
          semaphore.signal()
      }
      task.resume()
      semaphore.wait()
      

      Sample Input

      modules : "tasks"

      Sample Response

      200[ { "zpuid" : "4000000002521", "module" : "tasks", "module_display_name" : "Task", "field_id" : "4000000000173", "actions" : [ "pickup", "assign" ], "is_hidden" : true, "module_id" : "4000000000146", "key_ref" : "tasks.group_name", "display_name" : "Associated Team", "field_category" : "default", "field_type" : "team_picklist", "module_type" : "default" } ]
      Get Field permissions for Users in Project

      Retrieve module field permissions of multiple users in a project.

      GET

      /api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/fields/permissions

      OAuth Scope:

      ZohoProjects.portals.READ

      Query Parameter

      Param Name
      Data Type
      Description
      user_ids

      String

      required

      Enter the user IDs.

      modules

      String

      required

      Enter the module name.

      Request Example

      Request Example cURL
      • cURL
      • Deluge
      • Node.js
      • Ruby
      • PHP
      • Python
      • C
      • C#
      • C++
      • Clojure
      • Go
      • HTTP
      • Java
      • JS Fetch
      • JSON
      • Kotlin
      • Objective-C
      • OCaml
      • PowerShell
      • R
      • Swift

      curl -X GET \
      'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions?user_ids=1752587000000097260&modules=tasks' \
      -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions";
      params = Map();
      params.put("user_ids", "1752587000000097260");
      params.put("modules", "tasks");
      response = invokeUrl
      [
          url: url
          type: GET
          parameters: params
          connection: "projects"
      ];
      info response;
      
      const https = require('https');
      const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions');
      url.searchParams.append('user_ids', '1752587000000097260');
      url.searchParams.append('modules', 'tasks');
      
      const options = {
        hostname: url.hostname,
        path: url.pathname + url.search,
        method: 'GET',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
        }
      };
      
      const req = https.request(options, (res) => {
        let data = '';
        res.on('data', (chunk) => { data += chunk; });
        res.on('end', () => { console.log(JSON.parse(data)); });
      });
      
      req.on('error', (err) => { console.error(err); });
      req.end();
      
      require 'net/http'
      require 'uri'
      require 'json'
      
      url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions")
      params = {
        "user_ids" => "1752587000000097260",
        "modules" => "tasks"
      }
      url.query = URI.encode_www_form(params)
      
      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true
      
      request = Net::HTTP::Get.new(url)
      request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      
      response = http.request(request)
      puts response.read_body
      
      <?php
      $params = [
          'user_ids' => '1752587000000097260',
          'modules' => 'tasks',
      ];
      $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions" . "?" . http_build_query($params);
      
      $curl = curl_init();
      
      curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "GET",
        CURLOPT_HTTPHEADER => [
          "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        ],
      ]);
      
      $response = curl_exec($curl);
      curl_close($curl);
      
      echo $response;
      
      import requests
      
      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions"
      
      params = {
          "user_ids": "1752587000000097260",
          "modules": "tasks"
      }
      
      headers = {
          "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
      }
      
      response = requests.get(url, headers=headers, params=params)
      
      print(response.json())
      
      #include <stdio.h>
      #include <string.h>
      #include <curl/curl.h>
      
      int main(void) {
          CURL *curl = curl_easy_init();
          if (curl) {
              char *enc_user_ids = curl_easy_escape(curl, "1752587000000097260", 0);
              char *enc_modules = curl_easy_escape(curl, "tasks", 0);
              char url[2048];
              snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions?user_ids=%s&modules=%s", enc_user_ids, enc_modules);
      
              struct curl_slist *headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
              curl_easy_setopt(curl, CURLOPT_URL, url);
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
      
              CURLcode res = curl_easy_perform(curl);
              if (res != CURLE_OK)
                  fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
      
              curl_free(enc_user_ids);
              curl_free(enc_modules);
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      using System.Net.Http;
      using System.Text;
      using System.Web;
      
      var client = new HttpClient();
      client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      var query = HttpUtility.ParseQueryString(string.Empty);
      query["user_ids"] = "1752587000000097260";
      query["modules"] = "tasks";
      var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions") { Query = query.ToString() };
      var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
      
      var response = await client.SendAsync(request);
      var body = await response.Content.ReadAsStringAsync();
      Console.WriteLine(body);
      
      #include <iostream>
      #include <string>
      #include <curl/curl.h>
      
      static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
          output->append((char*)contents, size * nmemb);
          return size * nmemb;
      }
      
      int main() {
          CURL* curl = curl_easy_init();
          if (curl) {
              std::string response;
              char* enc_user_ids = curl_easy_escape(curl, "1752587000000097260", 0);
              char* enc_modules = curl_easy_escape(curl, "tasks", 0);
              std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions";
              url += "?user_ids=" + std::string(enc_user_ids);
              url += "&modules=" + std::string(enc_modules);
      
              struct curl_slist* headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
              curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
              curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
              curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
      
              CURLcode res = curl_easy_perform(curl);
              if (res == CURLE_OK)
                  std::cout << response << std::endl;
              else
                  std::cerr << curl_easy_strerror(res) << std::endl;
      
              curl_free(enc_user_ids);
              curl_free(enc_modules);
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      (require '[clj-http.client :as client])
      
      (let [enc-user_ids (java.net.URLEncoder/encode "1752587000000097260" "UTF-8")
            enc-modules (java.net.URLEncoder/encode "tasks" "UTF-8")
            url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions" "?user_ids=" enc-user_ids "&modules=" enc-modules)]
      (def response
        (client/get url
          {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
           :as :json}))
      
      (println (:body response))
      
      package main
      
      import (
          "fmt"
          "io"
          "net/http"
          "net/url"
      )
      
      func main() {
          req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions", nil)
          q := req.URL.Query()
          q.Add("user_ids", "1752587000000097260")
          q.Add("modules", "tasks")
          req.URL.RawQuery = q.Encode()
          req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
      
          resp, _ := http.DefaultClient.Do(req)
          defer resp.Body.Close()
          body, _ := io.ReadAll(resp.Body)
          fmt.Println(string(body))
      }
      
      GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions?user_ids=1752587000000097260&modules=tasks HTTP/1.1
      Host: projectsapi.zoho.com
      Authorization: Bearer 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/fields/permissions");
      uriBuilder.addParameter("user_ids", "1752587000000097260");
      uriBuilder.addParameter("modules", "tasks");
      HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
      requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      HttpResponse response = httpclient.execute(requestObj);
      
      HttpEntity responseEntity = response.getEntity();
      Object responseObject = EntityUtils.toString(responseEntity);
      String responseString = responseObject.toString();
      
      const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions';
      
      const params = new URLSearchParams({
        'user_ids': '1752587000000097260',
        'modules': 'tasks'
      });
      
      const options = {
        method: 'GET',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
        }
      };
      
      fetch(url + '?' + params.toString(), options)
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error(error));
      
      user_ids = "1752587000000097260"
      modules = "tasks"
      import java.net.HttpURLConnection
      import java.net.URL
      import okhttp3.HttpUrl.Companion.toHttpUrl
      
      fun main() {
          val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions".toHttpUrl().newBuilder()
          urlBuilder.addQueryParameter("user_ids", "1752587000000097260")
          urlBuilder.addQueryParameter("modules", "tasks")
          val url = URL(urlBuilder.build().toString())
          val conn = url.openConnection() as HttpURLConnection
          conn.requestMethod = "GET"
          conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
      
          val response = conn.inputStream.bufferedReader().readText()
          println(response)
      }
      
      NSString *encodedUser_ids = [@"1752587000000097260" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
      NSString *encodedModules = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
      NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions?user_ids=%@&modules=%@", encodedUser_ids, encodedModules];
      NSURL *url = [NSURL URLWithString:urlString];
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
      [request setHTTPMethod:@"GET"];
      [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
      
      NSURLSession *session = [NSURLSession sharedSession];
      NSURLSessionDataTask *task = [session dataTaskWithRequest:request
          completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
              NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
              NSLog(@"%@", result);
      }];
      [task resume];
      
      open Lwt
      open Cohttp_lwt_unix
      
      let () =
        let enc_user_ids = Uri.pct_encode "1752587000000097260" in
        let enc_modules = Uri.pct_encode "tasks" in
        let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions" ^ "?user_ids=" ^ enc_user_ids ^ "&modules=" ^ enc_modules) in
        let headers = Cohttp.Header.init ()
          |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        in
        Lwt_main.run (
          Client.get ~headers uri >>= fun (_, body) ->
          Cohttp_lwt.Body.to_string body >|= fun s ->
          print_endline s)
      
      $headers = @{
          "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      }
      
      $params = @{
          user_ids = "1752587000000097260"
          modules = "tasks"
      }
      $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
      $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions" + "?" + $queryString
      
      $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
      
      $response | ConvertTo-Json
      
      library(httr)
      
      url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions"
      
      params <- list(
        user_ids = "1752587000000097260",
        modules = "tasks"
      )
      
      response <- GET(
        url,
        add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
        query = params
      )
      
      content(response, "text")
      
      import Foundation
      
      var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/fields/permissions")!
      components.queryItems = [
          URLQueryItem(name: "user_ids", value: "1752587000000097260"),
          URLQueryItem(name: "modules", value: "tasks")
      ]
      let url = components.url!
      var request = URLRequest(url: url)
      request.httpMethod = "GET"
      request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
      
      let semaphore = DispatchSemaphore(value: 0)
      let task = URLSession.shared.dataTask(with: request) { data, response, error in
          if let data = data, let result = String(data: data, encoding: .utf8) {
              print(result)
          }
          semaphore.signal()
      }
      task.resume()
      semaphore.wait()
      

      Sample Input

      user_ids : "1752587000000097260" modules : "tasks"

      Sample Response

      200{ "1752587000000097260" : [ { "zpuid" : "1752587000000097260", "module" : "tasks", "module_display_name" : "Task", "field_id" : "7000000000161", "actions" : [ "pickup", "assign" ], "project_id" : "7000044450605", "is_hidden" : true, "module_id" : "7000000000134", "key_ref" : "tasks.group_name", "display_name" : "zp.groups.associatedteams", "field_category" : "default", "field_type" : "team_picklist" } ] }
      Edit Permissions for a User in Project

      Modify project permissions for a user.

      PATCH

      /api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/[ZPUID | EMAILID]/permissions

      OAuth Scope:

      ZohoProjects.portals.READ

      Parameter

      Param Name
      Data Type
      Description
      module

      String

      required

      Enter the module name.

      actions

      JSONArray

      required

      Specify the permissions. E.g. view_related, create, edit_owned, delete_all.

      field_id

      long

      Enter the field ID.

      type

      String

      required

      Specify the category. Accepted values: records, others, portal, settings, integrations, fields, or custom.

      operation

      String

      required

      Enter the operation name. E.g. grant, revoke.

      Request Example

      Request Example cURL
      • cURL
      • Deluge
      • Node.js
      • Ruby
      • PHP
      • Python
      • C
      • C#
      • C++
      • Clojure
      • Go
      • HTTP
      • Java
      • JS Fetch
      • JSON
      • Kotlin
      • Objective-C
      • OCaml
      • PowerShell
      • R
      • Swift

      curl -X PATCH \
      'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions' \
      -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
      -H 'Content-Type: application/json' \
      -d '{"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}'

      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions";
      params = Map();
      params.put("module", "task");
      params.put("actions", ["create"]);
      params.put("field_id", "12456890009");
      params.put("type", "records");
      params.put("operation", "revoke");
      response = invokeUrl
      [
          url: url
          type: PATCH
          parameters: params.toString()
          connection: "projects"
      ];
      info response;
      
      const https = require('https');
      const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions');
      
      const payload = JSON.stringify({"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"});
      
      const options = {
        hostname: url.hostname,
        path: url.pathname + url.search,
        method: 'PATCH',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
          'Content-Type': 'application/json',
          'Content-Length': Buffer.byteLength(payload)
        }
      };
      
      const req = https.request(options, (res) => {
        let data = '';
        res.on('data', (chunk) => { data += chunk; });
        res.on('end', () => { console.log(JSON.parse(data)); });
      });
      
      req.on('error', (err) => { console.error(err); });
      req.write(payload);
      req.end();
      
      require 'net/http'
      require 'uri'
      require 'json'
      
      url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions")
      
      http = Net::HTTP.new(url.host, url.port)
      http.use_ssl = true
      
      request = Net::HTTP::Patch.new(url)
      request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
      request["Content-Type"] = "application/json"
      request.body = '{"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}'
      
      response = http.request(request)
      puts response.read_body
      
      <?php
      $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions";
      
      $curl = curl_init();
      
      curl_setopt_array($curl, [
        CURLOPT_URL => $url,
        CURLOPT_RETURNTRANSFER => true,
        CURLOPT_CUSTOMREQUEST => "PATCH",
        CURLOPT_POSTFIELDS => '{"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}',
        CURLOPT_HTTPHEADER => [
          "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
          "Content-Type: application/json"
        ],
      ]);
      
      $response = curl_exec($curl);
      curl_close($curl);
      
      echo $response;
      
      import requests
      
      url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions"
      
      headers = {
          "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
          "Content-Type": "application/json",
      }
      
      payload = '{"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}'
      
      response = requests.patch(url, headers=headers, data=payload)
      
      print(response.json())
      
      #include <stdio.h>
      #include <string.h>
      #include <curl/curl.h>
      
      int main(void) {
          CURL *curl = curl_easy_init();
          if (curl) {
              struct curl_slist *headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
              headers = curl_slist_append(headers, "Content-Type: application/json");
      
              curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions");
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
              curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\",\"type\":\"records\",\"operation\":\"revoke\"}");
      
              CURLcode res = curl_easy_perform(curl);
              if (res != CURLE_OK)
                  fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
      
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      using System.Net.Http;
      using System.Text;
      using System.Web;
      
      var client = new HttpClient();
      client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions");
      request.Content = new StringContent(
          @"{""module"":""task"",""actions"":[""create""],""field_id"":""12456890009"",""type"":""records"",""operation"":""revoke""}",
          Encoding.UTF8,
          "application/json"
      );
      
      var response = await client.SendAsync(request);
      var body = await response.Content.ReadAsStringAsync();
      Console.WriteLine(body);
      
      #include <iostream>
      #include <string>
      #include <curl/curl.h>
      
      static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
          output->append((char*)contents, size * nmemb);
          return size * nmemb;
      }
      
      int main() {
          CURL* curl = curl_easy_init();
          if (curl) {
              std::string response;
              struct curl_slist* headers = NULL;
              headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
              headers = curl_slist_append(headers, "Content-Type: application/json");
      
              curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions");
              curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
              curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
              curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
              curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
              curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\",\"type\":\"records\",\"operation\":\"revoke\"}");
      
              CURLcode res = curl_easy_perform(curl);
              if (res == CURLE_OK)
                  std::cout << response << std::endl;
              else
                  std::cerr << curl_easy_strerror(res) << std::endl;
      
              curl_slist_free_all(headers);
              curl_easy_cleanup(curl);
          }
          return 0;
      }
      
      (require '[clj-http.client :as client])
      
      (def response
        (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions"
          {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                      "Content-Type" "application/json"}
           :body "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\",\"type\":\"records\",\"operation\":\"revoke\"}"
           :as :json}))
      
      (println (:body response))
      
      package main
      
      import (
          "fmt"
          "io"
          "net/http"
          "strings"
      )
      
      func main() {
          payload := strings.NewReader("{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\",\"type\":\"records\",\"operation\":\"revoke\"}")
          req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions", payload)
          req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
          req.Header.Add("Content-Type", "application/json")
      
          resp, _ := http.DefaultClient.Do(req)
          defer resp.Body.Close()
          body, _ := io.ReadAll(resp.Body)
          fmt.Println(string(body))
      }
      
      PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions HTTP/1.1
      Host: projectsapi.zoho.com
      Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
      Content-Type: application/json
      
      {"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}
      
      HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
      
      SSLContext sslContext = SSLContext.getDefault();
      SSLConnectionSocketFactory 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]/permissions");
      HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
      requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
      
      HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
      String requestBody = "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\",\"type\":\"records\",\"operation\":\"revoke\"}";
      requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
      
      HttpResponse response = httpclient.execute(requestObj);
      
      HttpEntity responseEntity = response.getEntity();
      Object responseObject = EntityUtils.toString(responseEntity);
      String responseString = responseObject.toString();
      
      const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions';
      
      const options = {
        method: 'PATCH',
        headers: {
          'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
          'Content-Type': 'application/json'
        },
        body: JSON.stringify({"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"})
      };
      
      fetch(url, options)
        .then(response => response.json())
        .then(data => console.log(data))
        .catch(error => console.error(error));
      
      {"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}
      import java.net.HttpURLConnection
      import java.net.URL
      import okhttp3.HttpUrl.Companion.toHttpUrl
      
      fun main() {
          val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions")
          val conn = url.openConnection() as HttpURLConnection
          conn.requestMethod = "PATCH"
          conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
          conn.setRequestProperty("Content-Type", "application/json")
          conn.doOutput = true
          conn.outputStream.bufferedWriter().use { it.write("""{"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}""") }
      
          val response = conn.inputStream.bufferedReader().readText()
          println(response)
      }
      
      NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions"];
      NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
      [request setHTTPMethod:@"PATCH"];
      [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
      [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
      NSData *body = [@"{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\",\"type\":\"records\",\"operation\":\"revoke\"}" dataUsingEncoding:NSUTF8StringEncoding];
      [request setHTTPBody:body];
      
      NSURLSession *session = [NSURLSession sharedSession];
      NSURLSessionDataTask *task = [session dataTaskWithRequest:request
          completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
              NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
              NSLog(@"%@", result);
      }];
      [task resume];
      
      open Lwt
      open Cohttp_lwt_unix
      
      let () =
        let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions" in
        let headers = Cohttp.Header.init ()
          |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
        in
        let body = Cohttp_lwt.Body.of_string {json|{"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}|json} in
        Lwt_main.run (
          Client.patch ~headers ~body uri >>= fun (_, body) ->
          Cohttp_lwt.Body.to_string body >|= fun s ->
          print_endline s)
      
      $headers = @{
          "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          "Content-Type" = "application/json"
      }
      
      $body = @'
      {"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}
      '@
      
      $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions" -Method PATCH -Headers $headers -Body $body
      
      $response | ConvertTo-Json
      
      library(httr)
      
      url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions"
      
      response <- PATCH(
        url,
        add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
        content_type_json(),
        body = "{\"module\":\"task\",\"actions\":[\"create\"],\"field_id\":\"12456890009\",\"type\":\"records\",\"operation\":\"revoke\"}"
      )
      
      content(response, "text")
      
      import Foundation
      
      let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/[ZPUID | EMAILID]/permissions")!
      var request = URLRequest(url: url)
      request.httpMethod = "PATCH"
      request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
      request.setValue("application/json", forHTTPHeaderField: "Content-Type")
      request.httpBody = """
      {"module":"task","actions":["create"],"field_id":"12456890009","type":"records","operation":"revoke"}
      """.data(using: .utf8)
      
      let semaphore = DispatchSemaphore(value: 0)
      let task = URLSession.shared.dataTask(with: request) { data, response, error in
          if let data = data, let result = String(data: data, encoding: .utf8) {
              print(result)
          }
          semaphore.signal()
      }
      task.resume()
      semaphore.wait()
      

      Sample Input

      Content-Type: application/json
      { "module" : "task", "actions" : [ "create" ], "field_id" : "12456890009", "type" : "records", "operation" : "revoke" }

      Sample Response

      204 No Content{ "permissions" : [ { "zpuid" : "170876000005155021", "project_id" : "170876000000008005", "module" : "task", "actions" : [ "view_related", "edit_owned", "delete_owned", "blueprintview" ] }, { "zpuid" : "170876000005155021", "project_id" : "170876000000008005", "module" : "tasklist", "actions" : [ "view" ] }, { "zpuid" : "170876000005155021", "project_id" : "170876000000008005", "module" : "milestone", "actions" : [ "view", "create", "delete_all" ] }, { "zpuid" : "170876000005155021", "project_id" : "170876000000008005", "module" : "issue", "actions" : [ "view_all", "create", "edit_all", "delete_all", "follower" ] } ], "profile" : { "is_primary" : false, "name" : "hiddennew1774345493073", "id" : "170876000005155021", "type" : "-1", "is_default" : false } }
      My Permissions

      This module covers all operations related to current user's permissions and access management in Zoho Projects.

      Get Current User Permissions

      Retrieve permission details of the current user.

      GET

      /api/v3/portal/[PORTALID]/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions

      OAuth Scope:

      ZohoProjects.portals.READ

      Query Parameter

      Param Name
      Data Type
      Description

      Request Example

      Request Example cURL

        Sample Response

        200[ { "module" : "task", "actions" : [ "view_all", "create", "edit_all", "delete_all", "reorder", "follower", "blueprintview", "blueprintassociate" ] } ]
        Get Current User Field Permission Details

        Retrieve field permissions of the current user.

        GET

        /api/v3/portal/[PORTALID]/users/me/fields/permissions

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        modules

        String

        required

        Enter the module name.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions?modules=tasks' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions";
        params = Map();
        params.put("modules", "tasks");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions');
        url.searchParams.append('modules', 'tasks');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions")
        params = {
          "modules" => "tasks"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'modules' => 'tasks',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions"
        
        params = {
            "modules": "tasks"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_modules = curl_easy_escape(curl, "tasks", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions?modules=%s", enc_modules);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_modules);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["modules"] = "tasks";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_modules = curl_easy_escape(curl, "tasks", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions";
                url += "?modules=" + std::string(enc_modules);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_modules);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-modules (java.net.URLEncoder/encode "tasks" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions" "?modules=" enc-modules)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions", nil)
            q := req.URL.Query()
            q.Add("modules", "tasks")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions?modules=tasks HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/me/fields/permissions");
        uriBuilder.addParameter("modules", "tasks");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions';
        
        const params = new URLSearchParams({
          'modules': 'tasks'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        modules = "tasks"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("modules", "tasks")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedModules = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions?modules=%@", encodedModules];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_modules = Uri.pct_encode "tasks" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions" ^ "?modules=" ^ enc_modules) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            modules = "tasks"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions"
        
        params <- list(
          modules = "tasks"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/users/me/fields/permissions")!
        components.queryItems = [
            URLQueryItem(name: "modules", value: "tasks")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        modules : "tasks"

        Sample Response

        200[ { "zpuid" : "4000000002521", "module" : "tasks", "module_display_name" : "Task", "field_id" : "4000000000173", "actions" : [ "pickup", "assign" ], "is_hidden" : true, "module_id" : "4000000000146", "key_ref" : "tasks.group_name", "display_name" : "Associated Team", "field_category" : "default", "field_type" : "team_picklist", "module_type" : "default" } ]
        Get Current User Permissions in Project

        Retrieve project permission details of the current user.

        GET

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions

        OAuth Scope:

        ZohoProjects.portals.READ

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/me/[ records | others | portal | settings | integrations | custom | any ]/permissions");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/[ records | others | portal | settings | integrations | custom | any ]/permissions")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200[ { "module" : "task", "actions" : [ "view_all", "create", "edit_all", "delete_all", "reorder", "follower", "blueprintview", "blueprintassociate" ] } ]
        Get Current User Field Permissions in Project

        Retrieve field permission details of the current user in a project.

        GET

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/users/me/fields/permissions

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        modules

        String

        required

        Enter the module name.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions?modules=tasks' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions";
        params = Map();
        params.put("modules", "tasks");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions');
        url.searchParams.append('modules', 'tasks');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions")
        params = {
          "modules" => "tasks"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'modules' => 'tasks',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions"
        
        params = {
            "modules": "tasks"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_modules = curl_easy_escape(curl, "tasks", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions?modules=%s", enc_modules);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_modules);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["modules"] = "tasks";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_modules = curl_easy_escape(curl, "tasks", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions";
                url += "?modules=" + std::string(enc_modules);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_modules);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-modules (java.net.URLEncoder/encode "tasks" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions" "?modules=" enc-modules)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions", nil)
            q := req.URL.Query()
            q.Add("modules", "tasks")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions?modules=tasks HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/me/fields/permissions");
        uriBuilder.addParameter("modules", "tasks");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions';
        
        const params = new URLSearchParams({
          'modules': 'tasks'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        modules = "tasks"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("modules", "tasks")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedModules = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions?modules=%@", encodedModules];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_modules = Uri.pct_encode "tasks" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions" ^ "?modules=" ^ enc_modules) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            modules = "tasks"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions"
        
        params <- list(
          modules = "tasks"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/users/me/fields/permissions")!
        components.queryItems = [
            URLQueryItem(name: "modules", value: "tasks")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        modules : "tasks"

        Sample Response

        200[ { "zpuid" : "4000000002521", "module" : "tasks", "module_display_name" : "Task", "field_id" : "4000000000173", "actions" : [ "pickup", "assign" ], "is_hidden" : true, "module_id" : "4000000000146", "key_ref" : "tasks.group_name", "display_name" : "Associated Team", "field_category" : "default", "field_type" : "team_picklist", "module_type" : "default" } ]
        Clients And Customers

        This module covers clients and customer related operations within Zoho Projects.. Use this API to manage client details, associate clients with projects, and update client information.

        Get Customer

        Retrieve customer 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 customer IDs.

        sort

        String

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

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients?ids=4000000029001&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients";
        params = Map();
        params.put("ids", "4000000029001");
        params.put("sort", "alphabetical:asc");
        params.put("page", "1");
        params.put("per_page", "10");
        params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"});
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients');
        url.searchParams.append('ids', '4000000029001');
        url.searchParams.append('sort', 'alphabetical:asc');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients")
        params = {
          "ids" => "4000000029001",
          "sort" => "alphabetical:asc",
          "page" => "1",
          "per_page" => "10",
          ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'ids' => '4000000029001',
            'sort' => 'alphabetical:asc',
            'page' => '1',
            'per_page' => '10',
            '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients"
        
        params = {
            "ids": "4000000029001",
            "sort": "alphabetical:asc",
            "page": "1",
            "per_page": "10",
            ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_ids = curl_easy_escape(curl, "4000000029001", 0);
                char *enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/clients?ids=%s&sort=%s&page=%s&per_page=%s&\"filter\"=%s", enc_ids, enc_sort, enc_page, enc_per_page, enc_"filter");
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_ids);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["ids"] = "4000000029001";
        query["sort"] = "alphabetical:asc";
        query["page"] = "1";
        query["per_page"] = "10";
        query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/clients") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_ids = curl_easy_escape(curl, "4000000029001", 0);
                char* enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients";
                url += "?ids=" + std::string(enc_ids);
                url += "&sort=" + std::string(enc_sort);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
                url += "&"filter"=" + std::string(enc_"filter");
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_ids);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-ids (java.net.URLEncoder/encode "4000000029001" "UTF-8")
              enc-sort (java.net.URLEncoder/encode "alphabetical:asc" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/clients" "?ids=" enc-ids "&sort=" enc-sort "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter")]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients", nil)
            q := req.URL.Query()
            q.Add("ids", "4000000029001")
            q.Add("sort", "alphabetical:asc")
            q.Add("page", "1")
            q.Add("per_page", "10")
            q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/clients?ids=4000000029001&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("ids", "4000000029001");
        uriBuilder.addParameter("sort", "alphabetical:asc");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients';
        
        const params = new URLSearchParams({
          'ids': '4000000029001',
          'sort': 'alphabetical:asc',
          'page': '1',
          'per_page': '10',
          '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        ids = "4000000029001"
        sort = "alphabetical:asc"
        page = "1"
        per_page = "10"
        "filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("ids", "4000000029001")
            urlBuilder.addQueryParameter("sort", "alphabetical:asc")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedIds = [@"4000000029001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSort = [@"alphabetical:asc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients?ids=%@&sort=%@&page=%@&per_page=%@&"filter"=%@", encodedIds, encodedSort, encodedPage, encodedPer_page, encoded"filter"];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_ids = Uri.pct_encode "4000000029001" in
          let enc_sort = Uri.pct_encode "alphabetical:asc" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/clients" ^ "?ids=" ^ enc_ids ^ "&sort=" ^ enc_sort ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter") in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            ids = "4000000029001"
            sort = "alphabetical:asc"
            page = "1"
            per_page = "10"
            "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"-`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"-`",`"unit`":`"-`",`"prior`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients"
        
        params <- list(
          ids = "4000000029001",
          sort = "alphabetical:asc",
          page = "1",
          per_page = "10",
          "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients")!
        components.queryItems = [
            URLQueryItem(name: "ids", value: "4000000029001"),
            URLQueryItem(name: "sort", value: "alphabetical:asc"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10"),
            URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        ids : "4000000029001" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "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" : "1", "page" : "1" } }
        Get Customers by Client User

        Retrieve Customers 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 order.
        E.g. alphabetical:asc

        page

        int

        Enter the page number.

        per_page

        int

        Enter the number of entries to display per page.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users?view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users";
        params = Map();
        params.put("view_type", 1);
        params.put("sort", "alphabetical:asc");
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users');
        url.searchParams.append('view_type', '1');
        url.searchParams.append('sort', 'alphabetical:asc');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users")
        params = {
          "view_type" => "1",
          "sort" => "alphabetical:asc",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'view_type' => '1',
            'sort' => 'alphabetical:asc',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users"
        
        params = {
            "view_type": "1",
            "sort": "alphabetical:asc",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_view_type = curl_easy_escape(curl, "1", 0);
                char *enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users?view_type=%s&sort=%s&page=%s&per_page=%s", enc_view_type, enc_sort, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_view_type);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["view_type"] = "1";
        query["sort"] = "alphabetical:asc";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_view_type = curl_easy_escape(curl, "1", 0);
                char* enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users";
                url += "?view_type=" + std::string(enc_view_type);
                url += "&sort=" + std::string(enc_sort);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_view_type);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-view_type (java.net.URLEncoder/encode "1" "UTF-8")
              enc-sort (java.net.URLEncoder/encode "alphabetical:asc" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users" "?view_type=" enc-view_type "&sort=" enc-sort "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users", nil)
            q := req.URL.Query()
            q.Add("view_type", "1")
            q.Add("sort", "alphabetical:asc")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users?view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("view_type", "1");
        uriBuilder.addParameter("sort", "alphabetical:asc");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users';
        
        const params = new URLSearchParams({
          'view_type': '1',
          'sort': 'alphabetical:asc',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        view_type = 1
        sort = "alphabetical:asc"
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("view_type", "1")
            urlBuilder.addQueryParameter("sort", "alphabetical:asc")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedView_type = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSort = [@"alphabetical:asc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users?view_type=%@&sort=%@&page=%@&per_page=%@", encodedView_type, encodedSort, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_view_type = Uri.pct_encode "1" in
          let enc_sort = Uri.pct_encode "alphabetical:asc" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users" ^ "?view_type=" ^ enc_view_type ^ "&sort=" ^ enc_sort ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            view_type = "1"
            sort = "alphabetical:asc"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users"
        
        params <- list(
          view_type = "1",
          sort = "alphabetical:asc",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users")!
        components.queryItems = [
            URLQueryItem(name: "view_type", value: "1"),
            URLQueryItem(name: "sort", value: "alphabetical:asc"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        view_type : 1 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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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" : "Hemsworth", "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 Customer Projects

        Retrieve all projects associated with a customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects?status=active&search_term=Zoho+Projects&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects";
        params = Map();
        params.put("status", "active");
        params.put("search_term", "Zoho Projects");
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects');
        url.searchParams.append('status', 'active');
        url.searchParams.append('search_term', 'Zoho Projects');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects")
        params = {
          "status" => "active",
          "search_term" => "Zoho Projects",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'status' => 'active',
            'search_term' => 'Zoho Projects',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects"
        
        params = {
            "status": "active",
            "search_term": "Zoho Projects",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_status = curl_easy_escape(curl, "active", 0);
                char *enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects?status=%s&search_term=%s&page=%s&per_page=%s", enc_status, enc_search_term, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_status);
                curl_free(enc_search_term);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["status"] = "active";
        query["search_term"] = "Zoho Projects";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_status = curl_easy_escape(curl, "active", 0);
                char* enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects";
                url += "?status=" + std::string(enc_status);
                url += "&search_term=" + std::string(enc_search_term);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_status);
                curl_free(enc_search_term);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-status (java.net.URLEncoder/encode "active" "UTF-8")
              enc-search_term (java.net.URLEncoder/encode "Zoho Projects" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects" "?status=" enc-status "&search_term=" enc-search_term "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects", nil)
            q := req.URL.Query()
            q.Add("status", "active")
            q.Add("search_term", "Zoho Projects")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects?status=active&search_term=Zoho+Projects&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("status", "active");
        uriBuilder.addParameter("search_term", "Zoho Projects");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects';
        
        const params = new URLSearchParams({
          'status': 'active',
          'search_term': 'Zoho Projects',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        status = "active"
        search_term = "Zoho Projects"
        page = "1"
        per_page = "10"
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("status", "active")
            urlBuilder.addQueryParameter("search_term", "Zoho Projects")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedStatus = [@"active" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSearch_term = [@"Zoho Projects" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects?status=%@&search_term=%@&page=%@&per_page=%@", encodedStatus, encodedSearch_term, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_status = Uri.pct_encode "active" in
          let enc_search_term = Uri.pct_encode "Zoho Projects" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects" ^ "?status=" ^ enc_status ^ "&search_term=" ^ enc_search_term ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            status = "active"
            search_term = "Zoho Projects"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects"
        
        params <- list(
          status = "active",
          search_term = "Zoho Projects",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects")!
        components.queryItems = [
            URLQueryItem(name: "status", value: "active"),
            URLQueryItem(name: "search_term", value: "Zoho Projects"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        status : "active" search_term : "Zoho Projects" page : "1" per_page : "10"

        Sample Response

        200{ "projects" : [ { "number" : 211, "is_primary_client" : false, "name" : "Zoho Projects", "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" } }
        Add Customers

        Add customers 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 customer name.

        webaddress

        String

        max length : 50

        Enter the web address of the customer.

        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.

        customer_type

        int

        default : 1

        Enter the customer type.
        Accepted values: 1 (Business), 2 (Individual).

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients' \
        -H 'Authorization: Bearer 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","customer_type":"1"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients";
        params = Map();
        params.put("name", "zas");
        params.put("webaddress", "https://zas.com");
        params.put("address_first", "chennai");
        params.put("address_second", "che");
        params.put("city", "chennai");
        params.put("state", "-");
        params.put("country", "-");
        params.put("zipcode", "600002");
        params.put("customer_type", "1");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients');
        
        const payload = JSON.stringify({"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients");
        request.Content = new StringContent(
            @"{""name"":""zas"",""webaddress"":""https://zas.com"",""address_first"":""chennai"",""address_second"":""che"",""city"":""chennai"",""state"":""-"",""country"":""-"",""zipcode"":""600002"",""customer_type"":""1""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/clients"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/clients HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"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/clients");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"zas\",\"webaddress\":\"https:\/\/zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/clients")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/clients" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/clients" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "zas", "webaddress" : "https://zas.com", "address_first" : "chennai", "address_second" : "che", "city" : "chennai", "state" : "-", "country" : "-", "zipcode" : "600002", "customer_type" : "1" }

        Sample Response

        200{ "clients" : [ { "zipcode" : "600002", "address_second" : "che", "city" : "chennai", "address_first" : "chennai", "name" : "zas", "id" : "5000000028005", "webaddress" : "https://zas.com" } ] }
        Update Customer

        Modify customer 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 customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]' \
        -H 'Authorization: Bearer 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"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]";
        params = Map();
        params.put("name", "zas");
        params.put("webaddress", "https://zas.com");
        params.put("address_first", "chennai");
        params.put("address_second", "che");
        params.put("city", "chennai");
        params.put("state", "-");
        params.put("country", "-");
        params.put("zipcode", "600002");
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]');
        
        const payload = JSON.stringify({"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]");
        request.Content = new StringContent(
            @"{""name"":""zas"",""webaddress"":""https://zas.com"",""address_first"":""chennai"",""address_second"":""che"",""city"":""chennai"",""state"":""-"",""country"":""-"",""zipcode"":""600002""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        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));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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
        Update Customer Projects

        Modify the projects associated with customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects";
        params = Map();
        params.put("select_all", false);
        params.put("selected", {"group_ids":"-","project_ids":"170876000000106031"});
        params.put("unselected", {"group_ids":"-","project_ids":"170876000000106031"});
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects');
        
        const payload = JSON.stringify({"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"select_all\":false,\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects");
        request.Content = new StringContent(
            @"{""select_all"":false,""selected"":{""group_ids"":""-"",""project_ids"":""170876000000106031""},""unselected"":{""group_ids"":""-"",""project_ids"":""170876000000106031""}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"select_all\":false,\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"select_all\":false,\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"select_all\":false,\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"}}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"select_all\":false,\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"}}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"select_all\":false,\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"select_all\":false,\"selected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"},\"unselected\":{\"group_ids\":\"-\",\"project_ids\":\"170876000000106031\"}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]/projects")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"select_all":false,"selected":{"group_ids":"-","project_ids":"170876000000106031"},"unselected":{"group_ids":"-","project_ids":"170876000000106031"}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "select_all" : false, "selected" : { "group_ids" : "-", "project_ids" : "170876000000106031" }, "unselected" : { "group_ids" : "-", "project_ids" : "170876000000106031" } }

        Sample Response

        204 No Content

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        INVALID_PARAMETER_VALUE HTTP 400

        Delete Client User

        Remove a customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]?notify=true' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]";
        params = Map();
        params.put("notify", "true");
        response = invokeUrl
        [
            url: url
            type: DELETE
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]');
        url.searchParams.append('notify', 'true');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]")
        params = {
          "notify" => "true"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'notify' => 'true',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]"
        
        params = {
            "notify": "true"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_notify = curl_easy_escape(curl, "true", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]?notify=%s", enc_notify);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["notify"] = "true";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_notify = curl_easy_escape(curl, "true", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]";
                url += "?notify=" + std::string(enc_notify);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]" "?notify=" enc-notify)]
        (def response
          (client/delete url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]", nil)
            q := req.URL.Query()
            q.Add("notify", "true")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]?notify=true HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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]");
        uriBuilder.addParameter("notify", "true");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]';
        
        const params = new URLSearchParams({
          'notify': 'true'
        });
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        notify = "true"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("notify", "true")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]?notify=%@", encodedNotify];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_notify = Uri.pct_encode "true" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]" ^ "?notify=" ^ enc_notify) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            notify = "true"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]"
        
        params <- list(
          notify = "true"
        )
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/users/[ZPUID | EMAILID]")!
        components.queryItems = [
            URLQueryItem(name: "notify", value: "true")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        notify : "true"

        Sample Response

        204 No Content
        Delete Customer

        Remove the customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]?notify=true' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]";
        params = Map();
        params.put("notify", "true");
        response = invokeUrl
        [
            url: url
            type: DELETE
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]');
        url.searchParams.append('notify', 'true');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]")
        params = {
          "notify" => "true"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'notify' => 'true',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]"
        
        params = {
            "notify": "true"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_notify = curl_easy_escape(curl, "true", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]?notify=%s", enc_notify);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["notify"] = "true";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_notify = curl_easy_escape(curl, "true", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]";
                url += "?notify=" + std::string(enc_notify);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]" "?notify=" enc-notify)]
        (def response
          (client/delete url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]", nil)
            q := req.URL.Query()
            q.Add("notify", "true")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]?notify=true HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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]");
        uriBuilder.addParameter("notify", "true");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]';
        
        const params = new URLSearchParams({
          'notify': 'true'
        });
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        notify = "true"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("notify", "true")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]?notify=%@", encodedNotify];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_notify = Uri.pct_encode "true" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]" ^ "?notify=" ^ enc_notify) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            notify = "true"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]"
        
        params <- list(
          notify = "true"
        )
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/clients/[CLIENTID]")!
        components.queryItems = [
            URLQueryItem(name: "notify", value: "true")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        notify : "true"

        Sample Response

        204 No Content
        Project Customers

        Get Project Customer

        Retrieve details of customer 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 customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients?ids=4000000029001&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients";
        params = Map();
        params.put("ids", "4000000029001");
        params.put("sort", "alphabetical:asc");
        params.put("page", "1");
        params.put("per_page", "10");
        params.put("filter", {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"});
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients');
        url.searchParams.append('ids', '4000000029001');
        url.searchParams.append('sort', 'alphabetical:asc');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients")
        params = {
          "ids" => "4000000029001",
          "sort" => "alphabetical:asc",
          "page" => "1",
          "per_page" => "10",
          ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'ids' => '4000000029001',
            'sort' => 'alphabetical:asc',
            'page' => '1',
            'per_page' => '10',
            '"filter"' => '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients"
        
        params = {
            "ids": "4000000029001",
            "sort": "alphabetical:asc",
            "page": "1",
            "per_page": "10",
            ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_ids = curl_easy_escape(curl, "4000000029001", 0);
                char *enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients?ids=%s&sort=%s&page=%s&per_page=%s&\"filter\"=%s", enc_ids, enc_sort, enc_page, enc_per_page, enc_"filter");
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_ids);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["ids"] = "4000000029001";
        query["sort"] = "alphabetical:asc";
        query["page"] = "1";
        query["per_page"] = "10";
        query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_ids = curl_easy_escape(curl, "4000000029001", 0);
                char* enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients";
                url += "?ids=" + std::string(enc_ids);
                url += "&sort=" + std::string(enc_sort);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
                url += "&"filter"=" + std::string(enc_"filter");
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_ids);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-ids (java.net.URLEncoder/encode "4000000029001" "UTF-8")
              enc-sort (java.net.URLEncoder/encode "alphabetical:asc" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients" "?ids=" enc-ids "&sort=" enc-sort "&page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter")]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients", nil)
            q := req.URL.Query()
            q.Add("ids", "4000000029001")
            q.Add("sort", "alphabetical:asc")
            q.Add("page", "1")
            q.Add("per_page", "10")
            q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients?ids=4000000029001&sort=alphabetical%3Aasc&page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22api_name%22%3A%22-%22%2C%22field_name%22%3A%22-%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%2C%22relative_columns%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22offset%22%3A%22-%22%2C%22unit%22%3A%22-%22%2C%22prior%22%3A%22-%22%7D%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("ids", "4000000029001");
        uriBuilder.addParameter("sort", "alphabetical:asc");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients';
        
        const params = new URLSearchParams({
          'ids': '4000000029001',
          'sort': 'alphabetical:asc',
          'page': '1',
          'per_page': '10',
          '"filter"': '{"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        ids = "4000000029001"
        sort = "alphabetical:asc"
        page = "1"
        per_page = "10"
        "filter" = {"criteria":[{"cfid":"4000000000242","api_name":"-","field_name":"-","criteria_condition":"contains","value":["1752587000000097269"],"relative_columns":[{"cfid":"4000000000242","offset":"-","unit":"-","prior":"-"}]}],"pattern":"1 AND 2"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("ids", "4000000029001")
            urlBuilder.addQueryParameter("sort", "alphabetical:asc")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedIds = [@"4000000029001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSort = [@"alphabetical:asc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients?ids=%@&sort=%@&page=%@&per_page=%@&"filter"=%@", encodedIds, encodedSort, encodedPage, encodedPer_page, encoded"filter"];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_ids = Uri.pct_encode "4000000029001" in
          let enc_sort = Uri.pct_encode "alphabetical:asc" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients" ^ "?ids=" ^ enc_ids ^ "&sort=" ^ enc_sort ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter") in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            ids = "4000000029001"
            sort = "alphabetical:asc"
            page = "1"
            per_page = "10"
            "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"api_name`":`"-`",`"field_name`":`"-`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"],`"relative_columns`":[{`"cfid`":`"4000000000242`",`"offset`":`"-`",`"unit`":`"-`",`"prior`":`"-`"}]}],`"pattern`":`"1 AND 2`"}"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients"
        
        params <- list(
          ids = "4000000029001",
          sort = "alphabetical:asc",
          page = "1",
          per_page = "10",
          "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients")!
        components.queryItems = [
            URLQueryItem(name: "ids", value: "4000000029001"),
            URLQueryItem(name: "sort", value: "alphabetical:asc"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10"),
            URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"api_name\":\"-\",\"field_name\":\"-\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"],\"relative_columns\":[{\"cfid\":\"4000000000242\",\"offset\":\"-\",\"unit\":\"-\",\"prior\":\"-\"}]}],\"pattern\":\"1 AND 2\"}")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        ids : "4000000029001" sort : "alphabetical:asc" page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "api_name" : "-", "field_name" : "-", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ], "relative_columns" : [ { "cfid" : "4000000000242", "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 Users by Customer

        Retrieve customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users?view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users";
        params = Map();
        params.put("view_type", 1);
        params.put("sort", "alphabetical:asc");
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users');
        url.searchParams.append('view_type', '1');
        url.searchParams.append('sort', 'alphabetical:asc');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users")
        params = {
          "view_type" => "1",
          "sort" => "alphabetical:asc",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'view_type' => '1',
            'sort' => 'alphabetical:asc',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users"
        
        params = {
            "view_type": "1",
            "sort": "alphabetical:asc",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_view_type = curl_easy_escape(curl, "1", 0);
                char *enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users?view_type=%s&sort=%s&page=%s&per_page=%s", enc_view_type, enc_sort, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_view_type);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["view_type"] = "1";
        query["sort"] = "alphabetical:asc";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_view_type = curl_easy_escape(curl, "1", 0);
                char* enc_sort = curl_easy_escape(curl, "alphabetical:asc", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users";
                url += "?view_type=" + std::string(enc_view_type);
                url += "&sort=" + std::string(enc_sort);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_view_type);
                curl_free(enc_sort);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-view_type (java.net.URLEncoder/encode "1" "UTF-8")
              enc-sort (java.net.URLEncoder/encode "alphabetical:asc" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users" "?view_type=" enc-view_type "&sort=" enc-sort "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users", nil)
            q := req.URL.Query()
            q.Add("view_type", "1")
            q.Add("sort", "alphabetical:asc")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users?view_type=1&sort=alphabetical%3Aasc&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("view_type", "1");
        uriBuilder.addParameter("sort", "alphabetical:asc");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users';
        
        const params = new URLSearchParams({
          'view_type': '1',
          'sort': 'alphabetical:asc',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        view_type = 1
        sort = "alphabetical:asc"
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("view_type", "1")
            urlBuilder.addQueryParameter("sort", "alphabetical:asc")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedView_type = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSort = [@"alphabetical:asc" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users?view_type=%@&sort=%@&page=%@&per_page=%@", encodedView_type, encodedSort, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_view_type = Uri.pct_encode "1" in
          let enc_sort = Uri.pct_encode "alphabetical:asc" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users" ^ "?view_type=" ^ enc_view_type ^ "&sort=" ^ enc_sort ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            view_type = "1"
            sort = "alphabetical:asc"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users"
        
        params <- list(
          view_type = "1",
          sort = "alphabetical:asc",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users")!
        components.queryItems = [
            URLQueryItem(name: "view_type", value: "1"),
            URLQueryItem(name: "sort", value: "alphabetical:asc"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        view_type : 1 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" : "Hemsworth", "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" : "Hemsworth", "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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts?page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts")
        params = {
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts"
        
        params = {
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts?page=%s&per_page=%s", enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts" "?page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts?page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts?page=%@&per_page=%@", encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts"
        
        params <- list(
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/accounts")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals?page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals")
        params = {
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals"
        
        params = {
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals?page=%s&per_page=%s", enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals" "?page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals?page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals?page=%@&per_page=%@", encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals"
        
        params <- list(
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/deals")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts?page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts")
        params = {
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts"
        
        params = {
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts?page=%s&per_page=%s", enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts" "?page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts?page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts?page=%@&per_page=%@", encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts"
        
        params <- list(
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/crm/contacts")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        page : "1" per_page : "10"

        Sample Response

        200{ "contacts" : "[]", "info" : { "per_page" : "100", "has_next_page" : "false", "page" : "1" } }
        Add Customers

        Create new customer within a project in the Zoho Projects portal.

        POST

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

        OAuth Scope:

        ZohoProjects.clients.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        max length : 200

        Enter the customer 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

        max length : 50

        Enter the state.

        country

        String

        max length : 50

        Enter the country.

        zipcode

        String

        max length : 20

        Enter the ZIP code.

        customer_type

        int

        default : 1

        Enter the customer type.
        Accepted values: 1 (Business), 2 (Individual).

        zohocrm_account_id

        long

        Enter the Zoho CRM Account ID.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients' \
        -H 'Authorization: Bearer 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","customer_type":"1","zohocrm_account_id":"-"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients";
        params = Map();
        params.put("name", "zas");
        params.put("webaddress", "https://zas.com");
        params.put("address_first", "chennai");
        params.put("address_second", "che");
        params.put("city", "chennai");
        params.put("state", "-");
        params.put("country", "-");
        params.put("zipcode", "600002");
        params.put("customer_type", "1");
        params.put("zohocrm_account_id", "-");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients');
        
        const payload = JSON.stringify({"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\",\"zohocrm_account_id\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients");
        request.Content = new StringContent(
            @"{""name"":""zas"",""webaddress"":""https://zas.com"",""address_first"":""chennai"",""address_second"":""che"",""city"":""chennai"",""state"":""-"",""country"":""-"",""zipcode"":""600002"",""customer_type"":""1"",""zohocrm_account_id"":""-""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\",\"zohocrm_account_id\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\",\"zohocrm_account_id\":\"-\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\",\"zohocrm_account_id\":\"-\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_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/projects/1752587000000097024/clients");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"zas\",\"webaddress\":\"https:\/\/zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\",\"zohocrm_account_id\":\"-\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\",\"zohocrm_account_id\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"zas\",\"webaddress\":\"https://zas.com\",\"address_first\":\"chennai\",\"address_second\":\"che\",\"city\":\"chennai\",\"state\":\"-\",\"country\":\"-\",\"zipcode\":\"600002\",\"customer_type\":\"1\",\"zohocrm_account_id\":\"-\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"zas","webaddress":"https://zas.com","address_first":"chennai","address_second":"che","city":"chennai","state":"-","country":"-","zipcode":"600002","customer_type":"1","zohocrm_account_id":"-"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "zas", "webaddress" : "https://zas.com", "address_first" : "chennai", "address_second" : "che", "city" : "chennai", "state" : "-", "country" : "-", "zipcode" : "600002", "customer_type" : "1", "zohocrm_account_id" : "-" }

        Sample Response

        201{ "clients" : [ { "customer_type" : "1", "name" : "Zlyker Equipments", "id" : "4000000025001" } ] }
        Associate Customers to Project

        Associate customers 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 customer IDs

        is_primary_client

        boolean

        Specify whether the customer is a primary customer.
        Accepted values: True or False

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form 'id = "4000000062001"' --form 'is_primary_client = "false"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client";
        params = Map();
        params.put("id", "4000000062001");
        params.put("is_primary_client", "false");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client');
        url.searchParams.append('id', '4000000062001');
        url.searchParams.append('is_primary_client', 'false');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client")
        params = {
          "id" => "4000000062001",
          "is_primary_client" => "false"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'id' => '4000000062001',
            'is_primary_client' => 'false',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client"
        
        params = {
            "id": "4000000062001",
            "is_primary_client": "false"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_id = curl_easy_escape(curl, "4000000062001", 0);
                char *enc_is_primary_client = curl_easy_escape(curl, "false", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client?id=%s&is_primary_client=%s", enc_id, enc_is_primary_client);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_id);
                curl_free(enc_is_primary_client);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["id"] = "4000000062001";
        query["is_primary_client"] = "false";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_id = curl_easy_escape(curl, "4000000062001", 0);
                char* enc_is_primary_client = curl_easy_escape(curl, "false", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client";
                url += "?id=" + std::string(enc_id);
                url += "&is_primary_client=" + std::string(enc_is_primary_client);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_id);
                curl_free(enc_is_primary_client);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-id (java.net.URLEncoder/encode "4000000062001" "UTF-8")
              enc-is_primary_client (java.net.URLEncoder/encode "false" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client" "?id=" enc-id "&is_primary_client=" enc-is_primary_client)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client", nil)
            q := req.URL.Query()
            q.Add("id", "4000000062001")
            q.Add("is_primary_client", "false")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client?id=4000000062001&is_primary_client=false HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/associate-client");
        uriBuilder.addParameter("id", "4000000062001");
        uriBuilder.addParameter("is_primary_client", "false");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client';
        
        const params = new URLSearchParams({
          'id': '4000000062001',
          'is_primary_client': 'false'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        id = "4000000062001"
        is_primary_client = "false"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("id", "4000000062001")
            urlBuilder.addQueryParameter("is_primary_client", "false")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedId = [@"4000000062001" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedIs_primary_client = [@"false" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client?id=%@&is_primary_client=%@", encodedId, encodedIs_primary_client];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_id = Uri.pct_encode "4000000062001" in
          let enc_is_primary_client = Uri.pct_encode "false" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client" ^ "?id=" ^ enc_id ^ "&is_primary_client=" ^ enc_is_primary_client) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            id = "4000000062001"
            is_primary_client = "false"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client"
        
        params <- list(
          id = "4000000062001",
          is_primary_client = "false"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/associate-client")!
        components.queryItems = [
            URLQueryItem(name: "id", value: "4000000062001"),
            URLQueryItem(name: "is_primary_client", value: "false")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        id : "4000000062001" is_primary_client : "false"

        Sample Response

        204 No Content
        Update Primary Customer

        Update the primary customer of a project.

        POST

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/primary-client/[PRIMARY-CLIENTID]

        OAuth Scope:

        ZohoProjects.clients.UPDATE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]";
        response = invokeUrl
        [
            url: url
            type: POST
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]" -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/primary-client/[PRIMARY-CLIENTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Delete Client User From Project

        Remove a customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]?notify=true' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]";
        params = Map();
        params.put("notify", "true");
        response = invokeUrl
        [
            url: url
            type: DELETE
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]');
        url.searchParams.append('notify', 'true');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]")
        params = {
          "notify" => "true"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'notify' => 'true',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]"
        
        params = {
            "notify": "true"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_notify = curl_easy_escape(curl, "true", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]?notify=%s", enc_notify);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["notify"] = "true";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_notify = curl_easy_escape(curl, "true", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]";
                url += "?notify=" + std::string(enc_notify);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]" "?notify=" enc-notify)]
        (def response
          (client/delete url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]", nil)
            q := req.URL.Query()
            q.Add("notify", "true")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]?notify=true HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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]");
        uriBuilder.addParameter("notify", "true");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]';
        
        const params = new URLSearchParams({
          'notify': 'true'
        });
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        notify = "true"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("notify", "true")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]?notify=%@", encodedNotify];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_notify = Uri.pct_encode "true" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]" ^ "?notify=" ^ enc_notify) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            notify = "true"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]"
        
        params <- list(
          notify = "true"
        )
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/users/[ZPUID | EMAILID]")!
        components.queryItems = [
            URLQueryItem(name: "notify", value: "true")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        notify : "true"

        Sample Response

        204 No Content
        Delete Customer From Project

        Remove a customer 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]?notify=true' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]";
        params = Map();
        params.put("notify", "true");
        response = invokeUrl
        [
            url: url
            type: DELETE
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]');
        url.searchParams.append('notify', 'true');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]")
        params = {
          "notify" => "true"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'notify' => 'true',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]"
        
        params = {
            "notify": "true"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_notify = curl_easy_escape(curl, "true", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]?notify=%s", enc_notify);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["notify"] = "true";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_notify = curl_easy_escape(curl, "true", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]";
                url += "?notify=" + std::string(enc_notify);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_notify);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-notify (java.net.URLEncoder/encode "true" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]" "?notify=" enc-notify)]
        (def response
          (client/delete url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]", nil)
            q := req.URL.Query()
            q.Add("notify", "true")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]?notify=true HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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]");
        uriBuilder.addParameter("notify", "true");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]';
        
        const params = new URLSearchParams({
          'notify': 'true'
        });
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        notify = "true"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("notify", "true")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedNotify = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]?notify=%@", encodedNotify];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_notify = Uri.pct_encode "true" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]" ^ "?notify=" ^ enc_notify) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            notify = "true"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]"
        
        params <- list(
          notify = "true"
        )
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/clients/[CLIENTID]")!
        components.queryItems = [
            URLQueryItem(name: "notify", value: "true")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        notify : "true"

        Sample Response

        204 No Content
        Contacts

        This module covers contact related operations within Zoho Projects. Use this API to create, update, associate, or delete contacts and manage their details.

        Get All Portal Contacts by customer

        Retrieve all contacts from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/client/[CLIENTID]/contacts

        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.

        search_string

        String

        Enter the search term.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts?index=0&range=200&search_string=%5C%22admin%5C%22' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts";
        params = Map();
        params.put("index", "0");
        params.put("range", "200");
        params.put("search_string", ""admin"");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts');
        url.searchParams.append('index', '0');
        url.searchParams.append('range', '200');
        url.searchParams.append('search_string', '\"admin\"');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts")
        params = {
          "index" => "0",
          "range" => "200",
          "search_string" => "\\"admin\\""
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'index' => '0',
            'range' => '200',
            'search_string' => '\"admin\"',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts"
        
        params = {
            "index": "0",
            "range": "200",
            "search_string": "\\"admin\\""
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_index = curl_easy_escape(curl, "0", 0);
                char *enc_range = curl_easy_escape(curl, "200", 0);
                char *enc_search_string = curl_easy_escape(curl, "\\\"admin\\\"", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts?index=%s&range=%s&search_string=%s", enc_index, enc_range, enc_search_string);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_index);
                curl_free(enc_range);
                curl_free(enc_search_string);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["index"] = "0";
        query["range"] = "200";
        query["search_string"] = "\\"admin\\"";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_index = curl_easy_escape(curl, "0", 0);
                char* enc_range = curl_easy_escape(curl, "200", 0);
                char* enc_search_string = curl_easy_escape(curl, "\\\"admin\\\"", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts";
                url += "?index=" + std::string(enc_index);
                url += "&range=" + std::string(enc_range);
                url += "&search_string=" + std::string(enc_search_string);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_index);
                curl_free(enc_range);
                curl_free(enc_search_string);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-index (java.net.URLEncoder/encode "0" "UTF-8")
              enc-range (java.net.URLEncoder/encode "200" "UTF-8")
              enc-search_string (java.net.URLEncoder/encode "\\"admin\\"" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts" "?index=" enc-index "&range=" enc-range "&search_string=" enc-search_string)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts", nil)
            q := req.URL.Query()
            q.Add("index", "0")
            q.Add("range", "200")
            q.Add("search_string", "\\"admin\\"")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts?index=0&range=200&search_string=%5C%22admin%5C%22 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/client/[CLIENTID]/contacts");
        uriBuilder.addParameter("index", "0");
        uriBuilder.addParameter("range", "200");
        uriBuilder.addParameter("search_string", "\\"admin\\"");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts';
        
        const params = new URLSearchParams({
          'index': '0',
          'range': '200',
          'search_string': '\"admin\"'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        index = "0"
        range = "200"
        search_string = "\"admin\""
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("index", "0")
            urlBuilder.addQueryParameter("range", "200")
            urlBuilder.addQueryParameter("search_string", "\\"admin\\"")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedIndex = [@"0" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedRange = [@"200" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSearch_string = [@"\\\"admin\\\"" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts?index=%@&range=%@&search_string=%@", encodedIndex, encodedRange, encodedSearch_string];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_index = Uri.pct_encode "0" in
          let enc_range = Uri.pct_encode "200" in
          let enc_search_string = Uri.pct_encode "\\"admin\\"" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts" ^ "?index=" ^ enc_index ^ "&range=" ^ enc_range ^ "&search_string=" ^ enc_search_string) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            index = "0"
            range = "200"
            search_string = "\`"admin\`""
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts"
        
        params <- list(
          index = "0",
          range = "200",
          search_string = "\\"admin\\""
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/client/[CLIENTID]/contacts")!
        components.queryItems = [
            URLQueryItem(name: "index", value: "0"),
            URLQueryItem(name: "range", value: "200"),
            URLQueryItem(name: "search_string", value: "\\"admin\\"")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        index : "0" range : "200" search_string : "\"admin\""

        Sample Response

        200[ { "id" : "4000001188003", "email" : "robert.clarke@zylker.com", "first_name" : "Robert", "last_name" : "Test", "invoice_rate" : "160.0", "clientId" : "4000000018001", "crm_contactId" : "-1", "displayName" : "Test Robert" } ]
        Get Contact Details

        Retrieve details of a contact from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/contacts/[CONTACTID]

        OAuth Scope:

        ZohoProjects.users.READ

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/contacts/[CONTACTID]");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "PROFILES" : [ { "created_time" : "03-12-2025", "updated_time" : "-1", "is_primary" : true, "created_user" : "Test Robert", "updated_time_format" : "03-19-2025", "created_by_zpuid" : "4000000000987", "is_default" : false, "type" : 3, "created_by" : "15755944", "name" : "Robert Client", "updated_by" : "15755944", "id" : "4000001099097", "is_client" : true, "updated_by_zpuid" : "4000000000987", "updated_user" : "Test Robert" } ], "INVOICE_RATE" : "0.000", "NEW_CLIENT_ALLOWED" : false, "PROJECTS" : [ { "PROJNUMBER" : "3", "PROJID" : "4000000017005", "PROJNAME" : "Project A", "ISADDED" : true } ], "LAST_NAME" : "public", "ISINVINTEG" : false, "FIRST_NAME" : "robert", "DISPLAY_NAME" : "robert public", "CLIENT_ID" : "4000000018001", "REDIRECTURL" : "https://store.zoho.com/html/store/index.html#subscription?serviceId=1&customId=3ea129746f33e7a94e9b4aaabb884e8b&view=e2ebc0be2e2c3cd868ed2318ba3d1d71", "EMAIL_ID" : "robert.clarke@zylker.com", "CONTACT_ID" : "4000000129001", "total_nonviewable_projects" : 0 }
        Create New Contacts

        Create new contacts in the Zoho Projects portal.

        POST

        /api/v3/portal/[PORTALID]/contacts

        OAuth Scope:

        ZohoProjects.users.CREATE

        Parameter

        Param Name
        Data Type
        Description

        JSONArray

        Enter the contact details.

        workprojects

        JSONArray

        Enter the project IDs.

        bulkprojects

        JSONObject

        Enter the project details

        clientId

        long

        Enter the customer ID.

        clientName

        String

        Enter the customer name.

        projectId

        long

        Enter the project ID.

        all_projects

        boolean

        Specify whether to select all projects.
        Accepted values: true or false.

        primaryclient

        String

        Specify whether the client is a primary client.
        Accepted values : yes or no.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form '"contacts" = [{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}]' --form 'workprojects = "[\"4000000017005\"]"' --form '"bulkprojects" = {"select_all":"false","selected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"unselected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"rateupdatedprojects":{"longkey":"23806000097686004"},"costrateupdatedprojects":{"longkey":"23806000097686004"}}' --form 'clientId = "23806000097687000"' --form 'clientName = "client admin"' --form 'projectId = "23806000097687000"' --form 'all_projects = "false"' --form 'primaryclient = "yes"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts";
        params = Map();
        params.put("contacts", [{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}]);
        params.put("workprojects", "["4000000017005"]");
        params.put("bulkprojects", {"select_all":"false","selected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"unselected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"rateupdatedprojects":{"longkey":"23806000097686004"},"costrateupdatedprojects":{"longkey":"23806000097686004"}});
        params.put("clientId", "23806000097687000");
        params.put("clientName", "client admin");
        params.put("projectId", "23806000097687000");
        params.put("all_projects", "false");
        params.put("primaryclient", "yes");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/contacts');
        url.searchParams.append('"contacts"', '[{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}]');
        url.searchParams.append('workprojects', '[\"4000000017005\"]');
        url.searchParams.append('"bulkprojects"', '{"select_all":"false","selected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"unselected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"rateupdatedprojects":{"longkey":"23806000097686004"},"costrateupdatedprojects":{"longkey":"23806000097686004"}}');
        url.searchParams.append('clientId', '23806000097687000');
        url.searchParams.append('clientName', 'client admin');
        url.searchParams.append('projectId', '23806000097687000');
        url.searchParams.append('all_projects', 'false');
        url.searchParams.append('primaryclient', 'yes');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts")
        params = {
          ""contacts"" => "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]",
          "workprojects" => "[\\"4000000017005\\"]",
          ""bulkprojects"" => "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}",
          "clientId" => "23806000097687000",
          "clientName" => "client admin",
          "projectId" => "23806000097687000",
          "all_projects" => "false",
          "primaryclient" => "yes"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            '"contacts"' => '[{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}]',
            'workprojects' => '[\"4000000017005\"]',
            '"bulkprojects"' => '{"select_all":"false","selected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"unselected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"rateupdatedprojects":{"longkey":"23806000097686004"},"costrateupdatedprojects":{"longkey":"23806000097686004"}}',
            'clientId' => '23806000097687000',
            'clientName' => 'client admin',
            'projectId' => '23806000097687000',
            'all_projects' => 'false',
            'primaryclient' => 'yes',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts"
        
        params = {
            ""contacts"": "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]",
            "workprojects": "[\\"4000000017005\\"]",
            ""bulkprojects"": "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}",
            "clientId": "23806000097687000",
            "clientName": "client admin",
            "projectId": "23806000097687000",
            "all_projects": "false",
            "primaryclient": "yes"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_"contacts" = curl_easy_escape(curl, "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]", 0);
                char *enc_workprojects = curl_easy_escape(curl, "[\\\"4000000017005\\\"]", 0);
                char *enc_"bulkprojects" = curl_easy_escape(curl, "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}", 0);
                char *enc_clientId = curl_easy_escape(curl, "23806000097687000", 0);
                char *enc_clientName = curl_easy_escape(curl, "client admin", 0);
                char *enc_projectId = curl_easy_escape(curl, "23806000097687000", 0);
                char *enc_all_projects = curl_easy_escape(curl, "false", 0);
                char *enc_primaryclient = curl_easy_escape(curl, "yes", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts?\"contacts\"=%s&workprojects=%s&\"bulkprojects\"=%s&clientId=%s&clientName=%s&projectId=%s&all_projects=%s&primaryclient=%s", enc_"contacts", enc_workprojects, enc_"bulkprojects", enc_clientId, enc_clientName, enc_projectId, enc_all_projects, enc_primaryclient);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_"contacts");
                curl_free(enc_workprojects);
                curl_free(enc_"bulkprojects");
                curl_free(enc_clientId);
                curl_free(enc_clientName);
                curl_free(enc_projectId);
                curl_free(enc_all_projects);
                curl_free(enc_primaryclient);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query[""contacts""] = "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]";
        query["workprojects"] = "[\\"4000000017005\\"]";
        query[""bulkprojects""] = "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}";
        query["clientId"] = "23806000097687000";
        query["clientName"] = "client admin";
        query["projectId"] = "23806000097687000";
        query["all_projects"] = "false";
        query["primaryclient"] = "yes";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_"contacts" = curl_easy_escape(curl, "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]", 0);
                char* enc_workprojects = curl_easy_escape(curl, "[\\\"4000000017005\\\"]", 0);
                char* enc_"bulkprojects" = curl_easy_escape(curl, "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}", 0);
                char* enc_clientId = curl_easy_escape(curl, "23806000097687000", 0);
                char* enc_clientName = curl_easy_escape(curl, "client admin", 0);
                char* enc_projectId = curl_easy_escape(curl, "23806000097687000", 0);
                char* enc_all_projects = curl_easy_escape(curl, "false", 0);
                char* enc_primaryclient = curl_easy_escape(curl, "yes", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts";
                url += "?"contacts"=" + std::string(enc_"contacts");
                url += "&workprojects=" + std::string(enc_workprojects);
                url += "&"bulkprojects"=" + std::string(enc_"bulkprojects");
                url += "&clientId=" + std::string(enc_clientId);
                url += "&clientName=" + std::string(enc_clientName);
                url += "&projectId=" + std::string(enc_projectId);
                url += "&all_projects=" + std::string(enc_all_projects);
                url += "&primaryclient=" + std::string(enc_primaryclient);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_"contacts");
                curl_free(enc_workprojects);
                curl_free(enc_"bulkprojects");
                curl_free(enc_clientId);
                curl_free(enc_clientName);
                curl_free(enc_projectId);
                curl_free(enc_all_projects);
                curl_free(enc_primaryclient);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-"contacts" (java.net.URLEncoder/encode "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]" "UTF-8")
              enc-workprojects (java.net.URLEncoder/encode "[\\"4000000017005\\"]" "UTF-8")
              enc-"bulkprojects" (java.net.URLEncoder/encode "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}" "UTF-8")
              enc-clientId (java.net.URLEncoder/encode "23806000097687000" "UTF-8")
              enc-clientName (java.net.URLEncoder/encode "client admin" "UTF-8")
              enc-projectId (java.net.URLEncoder/encode "23806000097687000" "UTF-8")
              enc-all_projects (java.net.URLEncoder/encode "false" "UTF-8")
              enc-primaryclient (java.net.URLEncoder/encode "yes" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts" "?"contacts"=" enc-"contacts" "&workprojects=" enc-workprojects "&"bulkprojects"=" enc-"bulkprojects" "&clientId=" enc-clientId "&clientName=" enc-clientName "&projectId=" enc-projectId "&all_projects=" enc-all_projects "&primaryclient=" enc-primaryclient)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts", nil)
            q := req.URL.Query()
            q.Add(""contacts"", "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]")
            q.Add("workprojects", "[\\"4000000017005\\"]")
            q.Add(""bulkprojects"", "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}")
            q.Add("clientId", "23806000097687000")
            q.Add("clientName", "client admin")
            q.Add("projectId", "23806000097687000")
            q.Add("all_projects", "false")
            q.Add("primaryclient", "yes")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/contacts?%22contacts%22=%5B%7B%22email%22%3A%22contacts%40zylker.com%22%2C%22first_name%22%3A%22contact%22%2C%22last_name%22%3A%22admin%22%2C%22invoice_rate%22%3A%22100%22%2C%22projects%22%3A%224000000017005%22%2C%22all_projects%22%3A%22false%22%7D%5D&workprojects=%5B%5C%224000000017005%5C%22%5D&%22bulkprojects%22=%7B%22select_all%22%3A%22false%22%2C%22selected%22%3A%7B%22group_ids%22%3A%5B%2223806000097686005%22%5D%2C%22project_ids%22%3A%5B%2223806000097686006%22%5D%7D%2C%22unselected%22%3A%7B%22group_ids%22%3A%5B%2223806000097686005%22%5D%2C%22project_ids%22%3A%5B%2223806000097686006%22%5D%7D%2C%22rateupdatedprojects%22%3A%7B%22longkey%22%3A%2223806000097686004%22%7D%2C%22costrateupdatedprojects%22%3A%7B%22longkey%22%3A%2223806000097686004%22%7D%7D&clientId=23806000097687000&clientName=client+admin&projectId=23806000097687000&all_projects=false&primaryclient=yes HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/contacts");
        uriBuilder.addParameter(""contacts"", "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]");
        uriBuilder.addParameter("workprojects", "[\\"4000000017005\\"]");
        uriBuilder.addParameter(""bulkprojects"", "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}");
        uriBuilder.addParameter("clientId", "23806000097687000");
        uriBuilder.addParameter("clientName", "client admin");
        uriBuilder.addParameter("projectId", "23806000097687000");
        uriBuilder.addParameter("all_projects", "false");
        uriBuilder.addParameter("primaryclient", "yes");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts';
        
        const params = new URLSearchParams({
          '"contacts"': '[{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}]',
          'workprojects': '[\"4000000017005\"]',
          '"bulkprojects"': '{"select_all":"false","selected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"unselected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"rateupdatedprojects":{"longkey":"23806000097686004"},"costrateupdatedprojects":{"longkey":"23806000097686004"}}',
          'clientId': '23806000097687000',
          'clientName': 'client admin',
          'projectId': '23806000097687000',
          'all_projects': 'false',
          'primaryclient': 'yes'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        "contacts" = [{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}]
        workprojects = "[\"4000000017005\"]"
        "bulkprojects" = {"select_all":"false","selected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"unselected":{"group_ids":["23806000097686005"],"project_ids":["23806000097686006"]},"rateupdatedprojects":{"longkey":"23806000097686004"},"costrateupdatedprojects":{"longkey":"23806000097686004"}}
        clientId = "23806000097687000"
        clientName = "client admin"
        projectId = "23806000097687000"
        all_projects = "false"
        primaryclient = "yes"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter(""contacts"", "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]")
            urlBuilder.addQueryParameter("workprojects", "[\\"4000000017005\\"]")
            urlBuilder.addQueryParameter(""bulkprojects"", "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}")
            urlBuilder.addQueryParameter("clientId", "23806000097687000")
            urlBuilder.addQueryParameter("clientName", "client admin")
            urlBuilder.addQueryParameter("projectId", "23806000097687000")
            urlBuilder.addQueryParameter("all_projects", "false")
            urlBuilder.addQueryParameter("primaryclient", "yes")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encoded"contacts" = [@"[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedWorkprojects = [@"[\\\"4000000017005\\\"]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encoded"bulkprojects" = [@"{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedClientId = [@"23806000097687000" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedClientName = [@"client admin" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedProjectId = [@"23806000097687000" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedAll_projects = [@"false" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPrimaryclient = [@"yes" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/contacts?"contacts"=%@&workprojects=%@&"bulkprojects"=%@&clientId=%@&clientName=%@&projectId=%@&all_projects=%@&primaryclient=%@", encoded"contacts", encodedWorkprojects, encoded"bulkprojects", encodedClientId, encodedClientName, encodedProjectId, encodedAll_projects, encodedPrimaryclient];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_"contacts" = Uri.pct_encode "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]" in
          let enc_workprojects = Uri.pct_encode "[\\"4000000017005\\"]" in
          let enc_"bulkprojects" = Uri.pct_encode "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}" in
          let enc_clientId = Uri.pct_encode "23806000097687000" in
          let enc_clientName = Uri.pct_encode "client admin" in
          let enc_projectId = Uri.pct_encode "23806000097687000" in
          let enc_all_projects = Uri.pct_encode "false" in
          let enc_primaryclient = Uri.pct_encode "yes" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts" ^ "?"contacts"=" ^ enc_"contacts" ^ "&workprojects=" ^ enc_workprojects ^ "&"bulkprojects"=" ^ enc_"bulkprojects" ^ "&clientId=" ^ enc_clientId ^ "&clientName=" ^ enc_clientName ^ "&projectId=" ^ enc_projectId ^ "&all_projects=" ^ enc_all_projects ^ "&primaryclient=" ^ enc_primaryclient) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            "contacts" = "[{`"email`":`"contacts@zylker.com`",`"first_name`":`"contact`",`"last_name`":`"admin`",`"invoice_rate`":`"100`",`"projects`":`"4000000017005`",`"all_projects`":`"false`"}]"
            workprojects = "[\`"4000000017005\`"]"
            "bulkprojects" = "{`"select_all`":`"false`",`"selected`":{`"group_ids`":[`"23806000097686005`"],`"project_ids`":[`"23806000097686006`"]},`"unselected`":{`"group_ids`":[`"23806000097686005`"],`"project_ids`":[`"23806000097686006`"]},`"rateupdatedprojects`":{`"longkey`":`"23806000097686004`"},`"costrateupdatedprojects`":{`"longkey`":`"23806000097686004`"}}"
            clientId = "23806000097687000"
            clientName = "client admin"
            projectId = "23806000097687000"
            all_projects = "false"
            primaryclient = "yes"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts"
        
        params <- list(
          "contacts" = "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]",
          workprojects = "[\\"4000000017005\\"]",
          "bulkprojects" = "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}",
          clientId = "23806000097687000",
          clientName = "client admin",
          projectId = "23806000097687000",
          all_projects = "false",
          primaryclient = "yes"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts")!
        components.queryItems = [
            URLQueryItem(name: ""contacts"", value: "[{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}]"),
            URLQueryItem(name: "workprojects", value: "[\\"4000000017005\\"]"),
            URLQueryItem(name: ""bulkprojects"", value: "{\"select_all\":\"false\",\"selected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"unselected\":{\"group_ids\":[\"23806000097686005\"],\"project_ids\":[\"23806000097686006\"]},\"rateupdatedprojects\":{\"longkey\":\"23806000097686004\"},\"costrateupdatedprojects\":{\"longkey\":\"23806000097686004\"}}"),
            URLQueryItem(name: "clientId", value: "23806000097687000"),
            URLQueryItem(name: "clientName", value: "client admin"),
            URLQueryItem(name: "projectId", value: "23806000097687000"),
            URLQueryItem(name: "all_projects", value: "false"),
            URLQueryItem(name: "primaryclient", value: "yes")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        "contacts" : [ { "email" : "contacts@zylker.com", "first_name" : "contact", "last_name" : "admin", "invoice_rate" : "100", "projects" : "4000000017005", "all_projects" : "false" } ] workprojects : "[\"4000000017005\"]" "bulkprojects" : { "select_all" : "false", "selected" : { "group_ids" : [ "23806000097686005" ], "project_ids" : [ "23806000097686006" ] }, "unselected" : { "group_ids" : [ "23806000097686005" ], "project_ids" : [ "23806000097686006" ] }, "rateupdatedprojects" : { "longkey" : "23806000097686004" }, "costrateupdatedprojects" : { "longkey" : "23806000097686004" } } clientId : "23806000097687000" clientName : "client admin" projectId : "23806000097687000" all_projects : "false" primaryclient : "yes"

        Sample Response

        201{ "contacts" : [ { "id" : "4000001189001", "email" : "robert.clarke@zylker.com", "first_name" : "Robert", "last_name" : "Test", "invoice_rate" : "160.0", "clientId" : "4000000018001", "crm_contactId" : "-1", "displayName" : "Test Robert" } ] }
        Convert Contact to Client User

        Convert contact to a client user in the Zoho Projects portal.

        POST

        /api/v3/portal/[PORTALID]/contacts/[CONTACTID]

        OAuth Scope:

        ZohoProjects.users.CREATE

        Parameter

        Param Name
        Data Type
        Description
        email

        String

        Enter the email ID.

        profileId

        long

        Enter the profile ID.

        invoice_rate

        String

        Enter the invoice rate of the user. E.g. $30 per hour.

        workprojects

        JSONArray

        Enter the project IDs.

        all_projects

        boolean

        Specify whether to select all projects.
        Accepted values: true or false.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form 'email = "contacts@zylker.com"' --form 'profileId = "4000001099097"' --form 'invoice_rate = "100"' --form 'workprojects = "[\"4000000017005\"]"' --form 'all_projects = "false"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
        params = Map();
        params.put("email", "contacts@zylker.com");
        params.put("profileId", "4000001099097");
        params.put("invoice_rate", "100");
        params.put("workprojects", "["4000000017005"]");
        params.put("all_projects", "false");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]');
        url.searchParams.append('email', 'contacts@zylker.com');
        url.searchParams.append('profileId', '4000001099097');
        url.searchParams.append('invoice_rate', '100');
        url.searchParams.append('workprojects', '[\"4000000017005\"]');
        url.searchParams.append('all_projects', 'false');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")
        params = {
          "email" => "contacts@zylker.com",
          "profileId" => "4000001099097",
          "invoice_rate" => "100",
          "workprojects" => "[\\"4000000017005\\"]",
          "all_projects" => "false"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'email' => 'contacts@zylker.com',
            'profileId' => '4000001099097',
            'invoice_rate' => '100',
            'workprojects' => '[\"4000000017005\"]',
            'all_projects' => 'false',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        params = {
            "email": "contacts@zylker.com",
            "profileId": "4000001099097",
            "invoice_rate": "100",
            "workprojects": "[\\"4000000017005\\"]",
            "all_projects": "false"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_email = curl_easy_escape(curl, "contacts@zylker.com", 0);
                char *enc_profileId = curl_easy_escape(curl, "4000001099097", 0);
                char *enc_invoice_rate = curl_easy_escape(curl, "100", 0);
                char *enc_workprojects = curl_easy_escape(curl, "[\\\"4000000017005\\\"]", 0);
                char *enc_all_projects = curl_easy_escape(curl, "false", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]?email=%s&profileId=%s&invoice_rate=%s&workprojects=%s&all_projects=%s", enc_email, enc_profileId, enc_invoice_rate, enc_workprojects, enc_all_projects);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_email);
                curl_free(enc_profileId);
                curl_free(enc_invoice_rate);
                curl_free(enc_workprojects);
                curl_free(enc_all_projects);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["email"] = "contacts@zylker.com";
        query["profileId"] = "4000001099097";
        query["invoice_rate"] = "100";
        query["workprojects"] = "[\\"4000000017005\\"]";
        query["all_projects"] = "false";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_email = curl_easy_escape(curl, "contacts@zylker.com", 0);
                char* enc_profileId = curl_easy_escape(curl, "4000001099097", 0);
                char* enc_invoice_rate = curl_easy_escape(curl, "100", 0);
                char* enc_workprojects = curl_easy_escape(curl, "[\\\"4000000017005\\\"]", 0);
                char* enc_all_projects = curl_easy_escape(curl, "false", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
                url += "?email=" + std::string(enc_email);
                url += "&profileId=" + std::string(enc_profileId);
                url += "&invoice_rate=" + std::string(enc_invoice_rate);
                url += "&workprojects=" + std::string(enc_workprojects);
                url += "&all_projects=" + std::string(enc_all_projects);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_email);
                curl_free(enc_profileId);
                curl_free(enc_invoice_rate);
                curl_free(enc_workprojects);
                curl_free(enc_all_projects);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-email (java.net.URLEncoder/encode "contacts@zylker.com" "UTF-8")
              enc-profileId (java.net.URLEncoder/encode "4000001099097" "UTF-8")
              enc-invoice_rate (java.net.URLEncoder/encode "100" "UTF-8")
              enc-workprojects (java.net.URLEncoder/encode "[\\"4000000017005\\"]" "UTF-8")
              enc-all_projects (java.net.URLEncoder/encode "false" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" "?email=" enc-email "&profileId=" enc-profileId "&invoice_rate=" enc-invoice_rate "&workprojects=" enc-workprojects "&all_projects=" enc-all_projects)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]", nil)
            q := req.URL.Query()
            q.Add("email", "contacts@zylker.com")
            q.Add("profileId", "4000001099097")
            q.Add("invoice_rate", "100")
            q.Add("workprojects", "[\\"4000000017005\\"]")
            q.Add("all_projects", "false")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]?email=contacts%40zylker.com&profileId=4000001099097&invoice_rate=100&workprojects=%5B%5C%224000000017005%5C%22%5D&all_projects=false HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/contacts/[CONTACTID]");
        uriBuilder.addParameter("email", "contacts@zylker.com");
        uriBuilder.addParameter("profileId", "4000001099097");
        uriBuilder.addParameter("invoice_rate", "100");
        uriBuilder.addParameter("workprojects", "[\\"4000000017005\\"]");
        uriBuilder.addParameter("all_projects", "false");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]';
        
        const params = new URLSearchParams({
          'email': 'contacts@zylker.com',
          'profileId': '4000001099097',
          'invoice_rate': '100',
          'workprojects': '[\"4000000017005\"]',
          'all_projects': 'false'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        email = "contacts@zylker.com"
        profileId = "4000001099097"
        invoice_rate = "100"
        workprojects = "[\"4000000017005\"]"
        all_projects = "false"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("email", "contacts@zylker.com")
            urlBuilder.addQueryParameter("profileId", "4000001099097")
            urlBuilder.addQueryParameter("invoice_rate", "100")
            urlBuilder.addQueryParameter("workprojects", "[\\"4000000017005\\"]")
            urlBuilder.addQueryParameter("all_projects", "false")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedEmail = [@"contacts@zylker.com" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedProfileId = [@"4000001099097" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedInvoice_rate = [@"100" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedWorkprojects = [@"[\\\"4000000017005\\\"]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedAll_projects = [@"false" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]?email=%@&profileId=%@&invoice_rate=%@&workprojects=%@&all_projects=%@", encodedEmail, encodedProfileId, encodedInvoice_rate, encodedWorkprojects, encodedAll_projects];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_email = Uri.pct_encode "contacts@zylker.com" in
          let enc_profileId = Uri.pct_encode "4000001099097" in
          let enc_invoice_rate = Uri.pct_encode "100" in
          let enc_workprojects = Uri.pct_encode "[\\"4000000017005\\"]" in
          let enc_all_projects = Uri.pct_encode "false" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" ^ "?email=" ^ enc_email ^ "&profileId=" ^ enc_profileId ^ "&invoice_rate=" ^ enc_invoice_rate ^ "&workprojects=" ^ enc_workprojects ^ "&all_projects=" ^ enc_all_projects) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            email = "contacts@zylker.com"
            profileId = "4000001099097"
            invoice_rate = "100"
            workprojects = "[\`"4000000017005\`"]"
            all_projects = "false"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        params <- list(
          email = "contacts@zylker.com",
          profileId = "4000001099097",
          invoice_rate = "100",
          workprojects = "[\\"4000000017005\\"]",
          all_projects = "false"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")!
        components.queryItems = [
            URLQueryItem(name: "email", value: "contacts@zylker.com"),
            URLQueryItem(name: "profileId", value: "4000001099097"),
            URLQueryItem(name: "invoice_rate", value: "100"),
            URLQueryItem(name: "workprojects", value: "[\\"4000000017005\\"]"),
            URLQueryItem(name: "all_projects", value: "false")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        email : "contacts@zylker.com" profileId : "4000001099097" invoice_rate : "100" workprojects : "[\"4000000017005\"]" all_projects : "false"

        Sample Response

        200{ "CURR_PROJID" : "0", "CLIENTCNT" : "22", "SUCCESS_EMAILID" : [ "robert.clarke@zylker.com" ], "USERLIST" : [ { "ISRESENDINVITE" : true, "DISPLAYNAME" : "Test Robert", "CURR_USERZPUID" : "4000000000987", "LOGINZPUID" : 4000001189033, "INVOICE" : 0, "EMAIL" : "robert.clarke@zylker.com", "ISACTIVE" : true, "COST_PER_HOUR" : 0, "PORTALPROFILEID" : "4000001099097", "PORTALPROFILENAME" : "Robert Client", "ISUSERCLOSED" : true, "COMPANYNAME" : "Test A", "PROFILETYPE" : 3, "COMPANYID" : "4000000018001" } ], "USERCNT" : { "Debugger" : 1, "Working in the current project" : 1, "g" : 2, "admin" : 2, "Developer" : 1, "portalusers" : 322, "Manager" : 226, "If you use this site regularly and would" : 1, "Clone Manager" : 4, "Team Lead" : 1, "Contractor" : 3, "Employee" : 48, "jointadmin" : 7, "Debugging Permission" : 3, "Analysis" : 1, "Empty Profile" : 1, "Read Only" : 19, "Clone Client New" : 1 }, "is_contact_converted" : true, "CURR_ROLE" : "admin", "COMPANYID" : "4000000018001", "ISINVINTEG" : false, "USERSCOUNT" : 1 }
        Update Contact

        Update a contact in the Zoho Projects portal.

        PATCH

        /api/v3/portal/[PORTALID]/contacts/[CONTACTID]

        OAuth Scope:

        ZohoProjects.users.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        email

        String

        Enter the email ID.

        first_name

        String

        max length : 50

        Enter the first name.

        last_name

        String

        max length : 50

        Enter the last name.

        invoice_rate

        String

        max length : 10

        Enter the invoice rate of the user. E.g. $30 per hour.

        projects

        JSONArray

        max length : 200000
        array size : 0-10000

        Enter the project IDs.

        all_projects

        boolean

        Specify whether to select all projects.
        Accepted values: true or false.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
        params = Map();
        params.put("email", "contacts@zylker.com");
        params.put("first_name", "contact");
        params.put("last_name", "admin");
        params.put("invoice_rate", "100");
        params.put("projects", "4000000017005");
        params.put("all_projects", "false");
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]');
        
        const payload = JSON.stringify({"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
        request.Content = new StringContent(
            @"{""email"":""contacts@zylker.com"",""first_name"":""contact"",""last_name"":""admin"",""invoice_rate"":""100"",""projects"":""4000000017005"",""all_projects"":""false""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"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/contacts/[CONTACTID]");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"email\":\"contacts@zylker.com\",\"first_name\":\"contact\",\"last_name\":\"admin\",\"invoice_rate\":\"100\",\"projects\":\"4000000017005\",\"all_projects\":\"false\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"email":"contacts@zylker.com","first_name":"contact","last_name":"admin","invoice_rate":"100","projects":"4000000017005","all_projects":"false"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "email" : "contacts@zylker.com", "first_name" : "contact", "last_name" : "admin", "invoice_rate" : "100", "projects" : "4000000017005", "all_projects" : "false" }

        Sample Response

        200{ "id" : "4000001189001", "email" : "robert.clarke@zylker.com", "first_name" : "Clarke", "last_name" : "Clarke", "invoice_rate" : "0.0", "clientId" : "4000000018001", "crm_contactId" : "-1", "projects" : [ ], "displayName" : "Scribe Clarke" }
        Delete Contact

        Remove a contact from the Zoho Projects portal.

        DELETE

        /api/v3/portal/[PORTALID]/contacts/[CONTACTID]

        OAuth Scope:

        ZohoProjects.users.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/contacts/[CONTACTID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/contacts/[CONTACTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Project Contacts

        Get Customer Contacts by Project

        Retrieve all customer contacts associated with a project.

        GET

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/client/[CLIENTID]/contacts

        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.

        search_string

        String

        Enter the search term.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts?index=0&range=200&search_string=%5C%22admin%5C%22' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts";
        params = Map();
        params.put("index", "0");
        params.put("range", "200");
        params.put("search_string", ""admin"");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts');
        url.searchParams.append('index', '0');
        url.searchParams.append('range', '200');
        url.searchParams.append('search_string', '\"admin\"');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts")
        params = {
          "index" => "0",
          "range" => "200",
          "search_string" => "\\"admin\\""
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'index' => '0',
            'range' => '200',
            'search_string' => '\"admin\"',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts"
        
        params = {
            "index": "0",
            "range": "200",
            "search_string": "\\"admin\\""
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_index = curl_easy_escape(curl, "0", 0);
                char *enc_range = curl_easy_escape(curl, "200", 0);
                char *enc_search_string = curl_easy_escape(curl, "\\\"admin\\\"", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts?index=%s&range=%s&search_string=%s", enc_index, enc_range, enc_search_string);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_index);
                curl_free(enc_range);
                curl_free(enc_search_string);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["index"] = "0";
        query["range"] = "200";
        query["search_string"] = "\\"admin\\"";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_index = curl_easy_escape(curl, "0", 0);
                char* enc_range = curl_easy_escape(curl, "200", 0);
                char* enc_search_string = curl_easy_escape(curl, "\\\"admin\\\"", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts";
                url += "?index=" + std::string(enc_index);
                url += "&range=" + std::string(enc_range);
                url += "&search_string=" + std::string(enc_search_string);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_index);
                curl_free(enc_range);
                curl_free(enc_search_string);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-index (java.net.URLEncoder/encode "0" "UTF-8")
              enc-range (java.net.URLEncoder/encode "200" "UTF-8")
              enc-search_string (java.net.URLEncoder/encode "\\"admin\\"" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts" "?index=" enc-index "&range=" enc-range "&search_string=" enc-search_string)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts", nil)
            q := req.URL.Query()
            q.Add("index", "0")
            q.Add("range", "200")
            q.Add("search_string", "\\"admin\\"")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts?index=0&range=200&search_string=%5C%22admin%5C%22 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/client/[CLIENTID]/contacts");
        uriBuilder.addParameter("index", "0");
        uriBuilder.addParameter("range", "200");
        uriBuilder.addParameter("search_string", "\\"admin\\"");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts';
        
        const params = new URLSearchParams({
          'index': '0',
          'range': '200',
          'search_string': '\"admin\"'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        index = "0"
        range = "200"
        search_string = "\"admin\""
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("index", "0")
            urlBuilder.addQueryParameter("range", "200")
            urlBuilder.addQueryParameter("search_string", "\\"admin\\"")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedIndex = [@"0" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedRange = [@"200" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSearch_string = [@"\\\"admin\\\"" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts?index=%@&range=%@&search_string=%@", encodedIndex, encodedRange, encodedSearch_string];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_index = Uri.pct_encode "0" in
          let enc_range = Uri.pct_encode "200" in
          let enc_search_string = Uri.pct_encode "\\"admin\\"" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts" ^ "?index=" ^ enc_index ^ "&range=" ^ enc_range ^ "&search_string=" ^ enc_search_string) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            index = "0"
            range = "200"
            search_string = "\`"admin\`""
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts"
        
        params <- list(
          index = "0",
          range = "200",
          search_string = "\\"admin\\""
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/client/[CLIENTID]/contacts")!
        components.queryItems = [
            URLQueryItem(name: "index", value: "0"),
            URLQueryItem(name: "range", value: "200"),
            URLQueryItem(name: "search_string", value: "\\"admin\\"")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        index : "0" range : "200" search_string : "\"admin\""

        Sample Response

        200[ { "id" : "4000001188003", "email" : "robert.clarke@zylker.com", "first_name" : "Robert", "last_name" : "Test", "invoice_rate" : "160.0", "clientId" : "4000000018001", "crm_contactId" : "-1", "displayName" : "Test Robert" } ]
        Associate Existing Contacts

        Associate existing contacts with a project.

        POST

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

        OAuth Scope:

        ZohoProjects.users.CREATE

        Parameter

        Param Name
        Data Type
        Description
        contactIds

        JSONArray

        Enter the contact IDs.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form 'contactIds = "[\"2723806000097687013\"]"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts";
        params = Map();
        params.put("contactIds", "["2723806000097687013"]");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts');
        url.searchParams.append('contactIds', '[\"2723806000097687013\"]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts")
        params = {
          "contactIds" => "[\\"2723806000097687013\\"]"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'contactIds' => '[\"2723806000097687013\"]',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts"
        
        params = {
            "contactIds": "[\\"2723806000097687013\\"]"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_contactIds = curl_easy_escape(curl, "[\\\"2723806000097687013\\\"]", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts?contactIds=%s", enc_contactIds);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_contactIds);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["contactIds"] = "[\\"2723806000097687013\\"]";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_contactIds = curl_easy_escape(curl, "[\\\"2723806000097687013\\\"]", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts";
                url += "?contactIds=" + std::string(enc_contactIds);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_contactIds);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-contactIds (java.net.URLEncoder/encode "[\\"2723806000097687013\\"]" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" "?contactIds=" enc-contactIds)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts", nil)
            q := req.URL.Query()
            q.Add("contactIds", "[\\"2723806000097687013\\"]")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts?contactIds=%5B%5C%222723806000097687013%5C%22%5D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/contacts");
        uriBuilder.addParameter("contactIds", "[\\"2723806000097687013\\"]");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts';
        
        const params = new URLSearchParams({
          'contactIds': '[\"2723806000097687013\"]'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        contactIds = "[\"2723806000097687013\"]"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("contactIds", "[\\"2723806000097687013\\"]")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedContactIds = [@"[\\\"2723806000097687013\\\"]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts?contactIds=%@", encodedContactIds];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_contactIds = Uri.pct_encode "[\\"2723806000097687013\\"]" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" ^ "?contactIds=" ^ enc_contactIds) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            contactIds = "[\`"2723806000097687013\`"]"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts"
        
        params <- list(
          contactIds = "[\\"2723806000097687013\\"]"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts")!
        components.queryItems = [
            URLQueryItem(name: "contactIds", value: "[\\"2723806000097687013\\"]")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        contactIds : "[\"2723806000097687013\"]"

        Sample Response

        204 No Content
        Disassociate Contact

        Disassociate a contact from a project.

        DELETE

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

        OAuth Scope:

        ZohoProjects.users.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/contacts/[CONTACTID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts/[CONTACTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Delete Multiple Contacts

        Remove contacts from a project.

        DELETE

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

        OAuth Scope:

        ZohoProjects.users.DELETE

        Parameter

        Param Name
        Data Type
        Description
        contactIds

        JSONArray

        Enter the contact IDs.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts?contactIds=%5B%5C%222723806000097687013%5C%22%5D' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts";
        params = Map();
        params.put("contactIds", "["2723806000097687013"]");
        response = invokeUrl
        [
            url: url
            type: DELETE
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts');
        url.searchParams.append('contactIds', '[\"2723806000097687013\"]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts")
        params = {
          "contactIds" => "[\\"2723806000097687013\\"]"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'contactIds' => '[\"2723806000097687013\"]',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts"
        
        params = {
            "contactIds": "[\\"2723806000097687013\\"]"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_contactIds = curl_easy_escape(curl, "[\\\"2723806000097687013\\\"]", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts?contactIds=%s", enc_contactIds);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_contactIds);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["contactIds"] = "[\\"2723806000097687013\\"]";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_contactIds = curl_easy_escape(curl, "[\\\"2723806000097687013\\\"]", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts";
                url += "?contactIds=" + std::string(enc_contactIds);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_contactIds);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-contactIds (java.net.URLEncoder/encode "[\\"2723806000097687013\\"]" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" "?contactIds=" enc-contactIds)]
        (def response
          (client/delete url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts", nil)
            q := req.URL.Query()
            q.Add("contactIds", "[\\"2723806000097687013\\"]")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts?contactIds=%5B%5C%222723806000097687013%5C%22%5D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/contacts");
        uriBuilder.addParameter("contactIds", "[\\"2723806000097687013\\"]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts';
        
        const params = new URLSearchParams({
          'contactIds': '[\"2723806000097687013\"]'
        });
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        contactIds = "[\"2723806000097687013\"]"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("contactIds", "[\\"2723806000097687013\\"]")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedContactIds = [@"[\\\"2723806000097687013\\\"]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts?contactIds=%@", encodedContactIds];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_contactIds = Uri.pct_encode "[\\"2723806000097687013\\"]" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" ^ "?contactIds=" ^ enc_contactIds) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            contactIds = "[\`"2723806000097687013\`"]"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts"
        
        params <- list(
          contactIds = "[\\"2723806000097687013\\"]"
        )
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/contacts")!
        components.queryItems = [
            URLQueryItem(name: "contactIds", value: "[\\"2723806000097687013\\"]")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        contactIds : "[\"2723806000097687013\"]"

        Sample Response

        204 No Content
        Tags

        This module covers tag related operations within Zoho Projects. Use this API to create, update, associate, and delete tags for different modules and projects.

        Get All Tags

        Retrieve all tags from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/tags

        OAuth Scope:

        ZohoProjects.tags.READ

        Query Parameter

        Param Name
        Data Type
        Description
        page

        int

        Enter the page number to retrieve.

        per_page

        int

        Enter the number of entries to be displayed per page.

        JSONObject

        Enter the filter criteria.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/tags?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%22%5B170876000008279193%5D%22%7D%5D%2C%22pattern%22%3A%221%22%7D' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        params.put("filter", {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"});
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tags');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tags")
        params = {
          "page" => "1",
          "per_page" => "10",
          ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
            '"filter"' => '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags"
        
        params = {
            "page": "1",
            "per_page": "10",
            ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/tags?page=%s&per_page=%s&\"filter\"=%s", enc_page, enc_per_page, enc_"filter");
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/tags") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
                url += "&"filter"=" + std::string(enc_"filter");
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/tags" "?page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter")]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/tags", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/tags?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%22%5B170876000008279193%5D%22%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/tags");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tags';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10',
          '"filter"': '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        "filter" = {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tags?page=%@&per_page=%@&"filter"=%@", encodedPage, encodedPer_page, encoded"filter"];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/tags" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter") in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
            "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"criteria_condition`":`"contains`",`"value`":`"[170876000008279193]`"}],`"pattern`":`"1`"}"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tags"
        
        params <- list(
          page = "1",
          per_page = "10",
          "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tags")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10"),
            URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "criteria_condition" : "contains", "value" : "[170876000008279193]" } ], "pattern" : "1" }

        Sample Response

        200{ "page_info" : { "per_page" : 100, "has_next_page" : false, "count" : 1, "page" : 1 }, "tags" : [ { "usage_count" : 0, "name" : "tag129", "id" : "4000000091113", "created_by" : { "zpuid" : "4000000002239", "full_name" : "Hector", "name" : "Hector", "last_name" : "", "id" : "21761641", "first_name" : "Hector", "email" : "hector@zylker.com" }, "color_hexcode" : "#7dcf7b" } ] }
        Create New Tags

        Create new tags in the Zoho Projects portal.

        POST

        /api/v3/portal/[PORTALID]/tags

        OAuth Scope:

        ZohoProjects.tags.CREATE

        Parameter

        Param Name
        Data Type
        Description

        JSONArray

        required

        Enter the tag information.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/tags' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form '"tags" = [{"name":"updatedtagadmin","color_class":"#7dcf7b"}]'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags";
        params = Map();
        params.put("tags", [{"name":"updatedtagadmin","color_class":"#7dcf7b"}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tags');
        url.searchParams.append('"tags"', '[{"name":"updatedtagadmin","color_class":"#7dcf7b"}]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tags")
        params = {
          ""tags"" => "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            '"tags"' => '[{"name":"updatedtagadmin","color_class":"#7dcf7b"}]',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags"
        
        params = {
            ""tags"": "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_"tags" = curl_easy_escape(curl, "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/tags?\"tags\"=%s", enc_"tags");
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_"tags");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query[""tags""] = "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/tags") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_"tags" = curl_easy_escape(curl, "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags";
                url += "?"tags"=" + std::string(enc_"tags");
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_"tags");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-"tags" (java.net.URLEncoder/encode "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/tags" "?"tags"=" enc-"tags")]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/tags", nil)
            q := req.URL.Query()
            q.Add(""tags"", "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/tags?%22tags%22=%5B%7B%22name%22%3A%22updatedtagadmin%22%2C%22color_class%22%3A%22%237dcf7b%22%7D%5D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/tags");
        uriBuilder.addParameter(""tags"", "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tags';
        
        const params = new URLSearchParams({
          '"tags"': '[{"name":"updatedtagadmin","color_class":"#7dcf7b"}]'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        "tags" = [{"name":"updatedtagadmin","color_class":"#7dcf7b"}]
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter(""tags"", "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encoded"tags" = [@"[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tags?"tags"=%@", encoded"tags"];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_"tags" = Uri.pct_encode "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/tags" ^ "?"tags"=" ^ enc_"tags") in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            "tags" = "[{`"name`":`"updatedtagadmin`",`"color_class`":`"#7dcf7b`"}]"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tags"
        
        params <- list(
          "tags" = "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tags")!
        components.queryItems = [
            URLQueryItem(name: ""tags"", value: "[{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}]")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        "tags" : [ { "name" : "updatedtagadmin", "color_class" : "#7dcf7b" } ]

        Sample Response

        201{ "tags" : [ { "usage_count" : "0", "name" : "tag602", "id" : "4000000108013", "color_hexcode" : "#7dcf7b" } ] }
        Update Tag

        Update a tag in the Zoho Projects portal.

        PATCH

        /api/v3/portal/[PORTALID]/tags/[TAGID]

        OAuth Scope:

        ZohoProjects.tags.UPDATE

        Parameter

        Param Name
        Data Type
        Description

        JSONObject

        Enter the tag information.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"updatedtagadmin","color_class":"#7dcf7b"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]";
        params = Map();
        params.put("name", "updatedtagadmin");
        params.put("color_class", "#7dcf7b");
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]');
        
        const payload = JSON.stringify({"name":"updatedtagadmin","color_class":"#7dcf7b"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"updatedtagadmin","color_class":"#7dcf7b"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"name":"updatedtagadmin","color_class":"#7dcf7b"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"updatedtagadmin","color_class":"#7dcf7b"}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]");
        request.Content = new StringContent(
            @"{""name"":""updatedtagadmin"",""color_class"":""#7dcf7b""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"updatedtagadmin","color_class":"#7dcf7b"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"updatedtagadmin","color_class":"#7dcf7b"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"updatedtagadmin","color_class":"#7dcf7b"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"updatedtagadmin","color_class":"#7dcf7b"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"updatedtagadmin","color_class":"#7dcf7b"}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"updatedtagadmin","color_class":"#7dcf7b"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"updatedtagadmin\",\"color_class\":\"#7dcf7b\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"updatedtagadmin","color_class":"#7dcf7b"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "updatedtagadmin", "color_class" : "#7dcf7b" }

        Sample Response

        200{ "tags" : { "usage_count" : "0", "name" : "tag601", "id" : "4000000108001", "color_hexcode" : "#7dcf7b" } }
        Delete Tag

        Remove a tag from the Zoho Projects portal.

        DELETE

        /api/v3/portal/[PORTALID]/tags/[TAGID]

        OAuth Scope:

        ZohoProjects.tags.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/tags/[TAGID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/tags/[TAGID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Project Tags

        Get Project Tags

        Retrieve tags from a project.

        GET

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

        OAuth Scope:

        ZohoProjects.tags.READ

        Query Parameter

        Param Name
        Data Type
        Description
        page

        int

        Enter the page number to retrieve.

        per_page

        int

        Enter the number of entries to be displayed per page.

        JSONObject

        Enter the filter criteria.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%22%5B170876000008279193%5D%22%7D%5D%2C%22pattern%22%3A%221%22%7D' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        params.put("filter", {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"});
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags")
        params = {
          "page" => "1",
          "per_page" => "10",
          ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
            '"filter"' => '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags"
        
        params = {
            "page": "1",
            "per_page": "10",
            ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags?page=%s&per_page=%s&\"filter\"=%s", enc_page, enc_per_page, enc_"filter");
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
                url += "&"filter"=" + std::string(enc_"filter");
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_"filter");
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags" "?page=" enc-page "&per_page=" enc-per_page "&"filter"=" enc-"filter")]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags?page=1&per_page=10&%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%22%5B170876000008279193%5D%22%7D%5D%2C%22pattern%22%3A%221%22%7D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/tags");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10',
          '"filter"': '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        "filter" = {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":"[170876000008279193]"}],"pattern":"1"}
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags?page=%@&per_page=%@&"filter"=%@", encodedPage, encodedPer_page, encoded"filter"];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&"filter"=" ^ enc_"filter") in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
            "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"criteria_condition`":`"contains`",`"value`":`"[170876000008279193]`"}],`"pattern`":`"1`"}"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags"
        
        params <- list(
          page = "1",
          per_page = "10",
          "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10"),
            URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":\"[170876000008279193]\"}],\"pattern\":\"1\"}")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        page : "1" per_page : "10" "filter" : { "criteria" : [ { "cfid" : "4000000000242", "criteria_condition" : "contains", "value" : "[170876000008279193]" } ], "pattern" : "1" }

        Sample Response

        200{ "column_size" : { }, "page_info" : { "per_page" : "50", "has_next_page" : "false", "count" : "3", "page" : "1", "sort_by" : [ { "field_names" : [ "usage_count" ], "order_by" : "DESCENDING" } ] }, "tags" : [ { "updated_time" : "2024-09-03T10:45:20.782Z", "created_time" : "2024-09-03T10:45:20.782Z", "usage_count" : 1, "name" : "tag1", "updated_by" : { "zpuid" : "4000000002411", "full_name" : "Hector", "name" : "Hector", "last_name" : "", "id" : "25586378", "first_name" : "Hector", "email" : "hector@zylker.com" }, "id" : "4000000005764", "created_by" : { "zpuid" : "4000000002411", "full_name" : "Hector", "name" : "Hector", "last_name" : "", "id" : "25586378", "first_name" : "Hector", "email" : "hector@zylker.com" }, "color_hexcode" : "#7dcf7b" } ], "filter_fields" : [ { "is_removable" : true, "is_custom_edit" : false, "is_default_field" : false, "table_name" : "ZPTags", "is_default_unassociated" : false, "min_char" : 0, "cfid" : 1, "is_editform_only" : false, "is_pii" : false, "max_char" : 0, "moduleId" : 0, "data_type_integer" : 0, "isLookupField" : false, "is_encrypted" : false, "isCompositeField" : false, "column_name" : "TAG_NAME", "is_editable" : true, "is_resolution" : false, "display_name" : "Title", "is_default" : true, "field_properties" : { }, "sequence" : 0, "field_type_integer" : 0, "isNullable" : false, "isCriteriaCallbackNeeded" : false, "field_type" : "singleline" } ], "column_order" : [ { "is_removable" : true, "is_custom_edit" : false, "is_default_field" : false, "table_name" : "ZPTags", "is_default_unassociated" : false, "min_char" : 0, "cfid" : 2, "is_editform_only" : false, "is_pii" : false, "max_char" : 0, "moduleId" : 0, "data_type_integer" : 0, "isLookupField" : false, "is_encrypted" : false, "isCompositeField" : false, "column_name" : "CREATED_BY", "is_editable" : true, "is_resolution" : false, "display_name" : "Created By", "is_default" : true, "field_properties" : { }, "sequence" : 0, "field_type_integer" : 0, "isNullable" : false, "isCriteriaCallbackNeeded" : false, "field_type" : "userpicklist" } ] }
        Associate Tags to Entity

        Associate tags with a module in a project.
        Note: This API will replace the current associated tags with the new tag IDs if the previous tag IDs are not included in the request.

        POST

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

        OAuth Scope:

        ZohoProjects.tags.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        tag_id

        String

        required

        Enter the tag ID.

        entity_id

        String

        required

        Enter the module ID.

        entityType

        int

        required

        Enter the module type.
        Accepted values: 2(Project), 3(Milestone), 4(Tasklist), 5(Task), 6(Issues), 7(Forum), 8(Status).

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form 'tag_id = "23806000097545166"' --form 'entity_id = "23806000097546097"' --form 'entityType = "5"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate";
        params = Map();
        params.put("tag_id", "23806000097545166");
        params.put("entity_id", "23806000097546097");
        params.put("entityType", "5");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate');
        url.searchParams.append('tag_id', '23806000097545166');
        url.searchParams.append('entity_id', '23806000097546097');
        url.searchParams.append('entityType', '5');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate")
        params = {
          "tag_id" => "23806000097545166",
          "entity_id" => "23806000097546097",
          "entityType" => "5"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'tag_id' => '23806000097545166',
            'entity_id' => '23806000097546097',
            'entityType' => '5',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate"
        
        params = {
            "tag_id": "23806000097545166",
            "entity_id": "23806000097546097",
            "entityType": "5"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_tag_id = curl_easy_escape(curl, "23806000097545166", 0);
                char *enc_entity_id = curl_easy_escape(curl, "23806000097546097", 0);
                char *enc_entityType = curl_easy_escape(curl, "5", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate?tag_id=%s&entity_id=%s&entityType=%s", enc_tag_id, enc_entity_id, enc_entityType);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_tag_id);
                curl_free(enc_entity_id);
                curl_free(enc_entityType);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["tag_id"] = "23806000097545166";
        query["entity_id"] = "23806000097546097";
        query["entityType"] = "5";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_tag_id = curl_easy_escape(curl, "23806000097545166", 0);
                char* enc_entity_id = curl_easy_escape(curl, "23806000097546097", 0);
                char* enc_entityType = curl_easy_escape(curl, "5", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate";
                url += "?tag_id=" + std::string(enc_tag_id);
                url += "&entity_id=" + std::string(enc_entity_id);
                url += "&entityType=" + std::string(enc_entityType);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_tag_id);
                curl_free(enc_entity_id);
                curl_free(enc_entityType);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-tag_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
              enc-entity_id (java.net.URLEncoder/encode "23806000097546097" "UTF-8")
              enc-entityType (java.net.URLEncoder/encode "5" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate" "?tag_id=" enc-tag_id "&entity_id=" enc-entity_id "&entityType=" enc-entityType)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate", nil)
            q := req.URL.Query()
            q.Add("tag_id", "23806000097545166")
            q.Add("entity_id", "23806000097546097")
            q.Add("entityType", "5")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate?tag_id=23806000097545166&entity_id=23806000097546097&entityType=5 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/tags/associate");
        uriBuilder.addParameter("tag_id", "23806000097545166");
        uriBuilder.addParameter("entity_id", "23806000097546097");
        uriBuilder.addParameter("entityType", "5");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate';
        
        const params = new URLSearchParams({
          'tag_id': '23806000097545166',
          'entity_id': '23806000097546097',
          'entityType': '5'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        tag_id = "23806000097545166"
        entity_id = "23806000097546097"
        entityType = "5"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("tag_id", "23806000097545166")
            urlBuilder.addQueryParameter("entity_id", "23806000097546097")
            urlBuilder.addQueryParameter("entityType", "5")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedTag_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntity_id = [@"23806000097546097" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntityType = [@"5" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate?tag_id=%@&entity_id=%@&entityType=%@", encodedTag_id, encodedEntity_id, encodedEntityType];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_tag_id = Uri.pct_encode "23806000097545166" in
          let enc_entity_id = Uri.pct_encode "23806000097546097" in
          let enc_entityType = Uri.pct_encode "5" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate" ^ "?tag_id=" ^ enc_tag_id ^ "&entity_id=" ^ enc_entity_id ^ "&entityType=" ^ enc_entityType) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            tag_id = "23806000097545166"
            entity_id = "23806000097546097"
            entityType = "5"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate"
        
        params <- list(
          tag_id = "23806000097545166",
          entity_id = "23806000097546097",
          entityType = "5"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/associate")!
        components.queryItems = [
            URLQueryItem(name: "tag_id", value: "23806000097545166"),
            URLQueryItem(name: "entity_id", value: "23806000097546097"),
            URLQueryItem(name: "entityType", value: "5")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        tag_id : "23806000097545166" entity_id : "23806000097546097" entityType : "5"

        Sample Response

        204 No Content
        Disassociate Tags from Entity

        Remove associated tags from a module in a project.

        POST

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

        OAuth Scope:

        ZohoProjects.tags.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        tag_id

        long

        required

        Enter the tag ID.

        entity_id

        long

        required

        Enter the module ID.

        entityType

        int

        required

        Enter the module type.
        Accepted values: 2(Project), 3(Milestone), 4(Tasklist), 5(Task), 6(Issues), 7(Forum), 8(Status).

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form 'tag_id = "23806000097545166"' --form 'entity_id = "23806000097546097"' --form 'entityType = "5"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate";
        params = Map();
        params.put("tag_id", "23806000097545166");
        params.put("entity_id", "23806000097546097");
        params.put("entityType", "5");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate');
        url.searchParams.append('tag_id', '23806000097545166');
        url.searchParams.append('entity_id', '23806000097546097');
        url.searchParams.append('entityType', '5');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate")
        params = {
          "tag_id" => "23806000097545166",
          "entity_id" => "23806000097546097",
          "entityType" => "5"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'tag_id' => '23806000097545166',
            'entity_id' => '23806000097546097',
            'entityType' => '5',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate"
        
        params = {
            "tag_id": "23806000097545166",
            "entity_id": "23806000097546097",
            "entityType": "5"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_tag_id = curl_easy_escape(curl, "23806000097545166", 0);
                char *enc_entity_id = curl_easy_escape(curl, "23806000097546097", 0);
                char *enc_entityType = curl_easy_escape(curl, "5", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate?tag_id=%s&entity_id=%s&entityType=%s", enc_tag_id, enc_entity_id, enc_entityType);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_tag_id);
                curl_free(enc_entity_id);
                curl_free(enc_entityType);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["tag_id"] = "23806000097545166";
        query["entity_id"] = "23806000097546097";
        query["entityType"] = "5";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_tag_id = curl_easy_escape(curl, "23806000097545166", 0);
                char* enc_entity_id = curl_easy_escape(curl, "23806000097546097", 0);
                char* enc_entityType = curl_easy_escape(curl, "5", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate";
                url += "?tag_id=" + std::string(enc_tag_id);
                url += "&entity_id=" + std::string(enc_entity_id);
                url += "&entityType=" + std::string(enc_entityType);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_tag_id);
                curl_free(enc_entity_id);
                curl_free(enc_entityType);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-tag_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
              enc-entity_id (java.net.URLEncoder/encode "23806000097546097" "UTF-8")
              enc-entityType (java.net.URLEncoder/encode "5" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate" "?tag_id=" enc-tag_id "&entity_id=" enc-entity_id "&entityType=" enc-entityType)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate", nil)
            q := req.URL.Query()
            q.Add("tag_id", "23806000097545166")
            q.Add("entity_id", "23806000097546097")
            q.Add("entityType", "5")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate?tag_id=23806000097545166&entity_id=23806000097546097&entityType=5 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/tags/dissociate");
        uriBuilder.addParameter("tag_id", "23806000097545166");
        uriBuilder.addParameter("entity_id", "23806000097546097");
        uriBuilder.addParameter("entityType", "5");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate';
        
        const params = new URLSearchParams({
          'tag_id': '23806000097545166',
          'entity_id': '23806000097546097',
          'entityType': '5'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        tag_id = "23806000097545166"
        entity_id = "23806000097546097"
        entityType = "5"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("tag_id", "23806000097545166")
            urlBuilder.addQueryParameter("entity_id", "23806000097546097")
            urlBuilder.addQueryParameter("entityType", "5")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedTag_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntity_id = [@"23806000097546097" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntityType = [@"5" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate?tag_id=%@&entity_id=%@&entityType=%@", encodedTag_id, encodedEntity_id, encodedEntityType];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_tag_id = Uri.pct_encode "23806000097545166" in
          let enc_entity_id = Uri.pct_encode "23806000097546097" in
          let enc_entityType = Uri.pct_encode "5" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate" ^ "?tag_id=" ^ enc_tag_id ^ "&entity_id=" ^ enc_entity_id ^ "&entityType=" ^ enc_entityType) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            tag_id = "23806000097545166"
            entity_id = "23806000097546097"
            entityType = "5"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate"
        
        params <- list(
          tag_id = "23806000097545166",
          entity_id = "23806000097546097",
          entityType = "5"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/tags/dissociate")!
        components.queryItems = [
            URLQueryItem(name: "tag_id", value: "23806000097545166"),
            URLQueryItem(name: "entity_id", value: "23806000097546097"),
            URLQueryItem(name: "entityType", value: "5")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        tag_id : "23806000097545166" entity_id : "23806000097546097" entityType : "5"

        Sample Response

        204 No Content
        Documents

        This module covers operations related to the team folder. Use this API to retrieve, create, associate, disassociate, or delete the team folder.

        Get Project Team Folder/Folder Details

        Retrieve the team folder or folder details from a project.

        GET

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

        OAuth Scope:

        ZohoProjects.documents.READ, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/documents");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "documents" : { "user_permissions" : { "folder" : [ { "workdrive_role" : "admin", "profiles" : [ { "id" : "103427000000048358", "name" : "Manager" } ] }, { "workdrive_role" : "organizer", "profiles" : [ { "id" : "103427000001047001", "name" : "Read Only" } ] }, { "workdrive_role" : "editor", "profiles" : [ { "id" : "103427000000048361", "name" : "Employee" } ] } ], "team_folder" : [ { "workdrive_role" : "editor", "profiles" : [ { "id" : "103427000000048364", "name" : "Contractor" } ] }, { "workdrive_role" : "organizer", "profiles" : [ { "id" : "103427000000048361", "name" : "Employee" } ] }, { "workdrive_role" : "admin", "profiles" : [ { "id" : "103427000000048358", "name" : "Manager" } ] } ] }, "team_folders" : [ { "folder_id" : "103427000004535032", "name" : "New Team Folder", "workdrive_folder_id" : "z5ycq2bae5b9867714089b37c16301c202cbf", "is_personal_space" : false, "is_folder" : false, "is_default" : false, "is_public" : false, "is_customized" : false, "capabilities" : { "can_delete" : true, "can_manage_users" : true } } ], "folders" : [ { "folder_id" : "103427000004488141", "name" : "Project 1-Attachments", "workdrive_folder_id" : "k58sx2546906212a0489ba23fe0689ee170c1", "is_personal_space" : false, "is_folder" : true, "is_default" : true, "is_customized" : true, "capabilities" : { "can_delete" : false, "can_manage_users" : true } } ], "entity_attachments_settings" : { "available" : "false" } } }

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        FORBIDDEN HTTP 403

        Team Folder

        This module covers operations related to the team folder. Use this API to create, associate, disassociate, get, and delete the team folder.

        Get Project Team Folder Details

        Retrieve the team folder details of a project.

        GET

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/teamfolder/[TEAMFOLDERID]

        OAuth Scope:

        ZohoProjects.documents.READ, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/documents/teamfolder/[TEAMFOLDERID]");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "documents" : { "workdrive_folder_id" : "we9i8450c712dd9b643ca9fa3c3009a69f711", "user_permissions" : [ { "workdrive_role" : "editor", "profiles" : [ { "id" : "9000000005923", "name" : "Employee" } ] }, { "workdrive_role" : "organizer", "profiles" : [ { "id" : "9000000002910", "name" : "Manager" } ] }, { "workdrive_role" : "commenter", "profiles" : [ { "id" : "9000000002916", "name" : "Contractor" } ] } ], "name" : "Team Folder", "description" : "Description of the Team Folder", "team_id" : "we9i8141e70a02a78447faf5b0b0ad85d0aee", "folder_id" : "9000000005947" } }

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        FORBIDDEN HTTP 403

        Create Project Team Folder

        Create a team folder in a project.

        POST

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

        OAuth Scope:

        ZohoProjects.documents.CREATE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 50

        Enter the name of the team folder.

        description

        String

        max length : 200

        Enter the description.

        user_permissions

        JSONArray

        required
        max length : 10000

        Enter the permission details for the team folder.
        To get the default team folder permission, use the Get Project Team Folder/Folder Details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder";
        params = Map();
        params.put("name", "Team Folder");
        params.put("description", "Description of the Team Folder");
        params.put("user_permissions", [{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder');
        
        const payload = JSON.stringify({"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Team Folder\",\"description\":\"Description of the Team Folder\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder");
        request.Content = new StringContent(
            @"{""name"":""Team Folder"",""description"":""Description of the Team Folder"",""user_permissions"":[{""workdrive_role"":""admin"",""users"":[{""zpuid"":""225955000000159234""}],""profiles"":[{""id"":""22595500000011234""}]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Team Folder\",\"description\":\"Description of the Team Folder\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"Team Folder\",\"description\":\"Description of the Team Folder\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"Team Folder\",\"description\":\"Description of the Team Folder\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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/documents/teamfolder");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"Team Folder\",\"description\":\"Description of the Team Folder\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"Team Folder\",\"description\":\"Description of the Team Folder\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"Team Folder\",\"description\":\"Description of the Team Folder\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"Team Folder","description":"Description of the Team Folder","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "Team Folder", "description" : "Description of the Team Folder", "user_permissions" : [ { "workdrive_role" : "admin", "users" : [ { "zpuid" : "225955000000159234" } ], "profiles" : [ { "id" : "22595500000011234" } ] } ] }

        Sample Response

        200{ "team_folders" : [ { "workdrive_folder_id" : "we9i8450c712dd9b643ca9fa3c3009a69f711", "is_personal_space" : false, "name" : "Team Folder", "folder_id" : "9000000005947" } ] }

        Possible Errors

        INVALID_OPERATION HTTP 403

        GUEST_AS_ADMIN HTTP 403

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        DUPLICATE_NAME_ERROR HTTP 409

        Update Project Team Folder Details

        Modify the details of a team folder in a project.

        PUT

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/teamfolder/[TEAMFOLDERID]

        OAuth Scope:

        ZohoProjects.documents.UPDATE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Parameter

        Param Name
        Data Type
        Description
        user_permissions

        JSONArray

        required
        max length : 100000
        array size : 0-10

        Enter the permission details for the team folder.
        To get the default team folder permission, use the Get Project Team Folder/Folder Details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PUT \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]";
        params = Map();
        params.put("user_permissions", [{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]);
        response = invokeUrl
        [
            url: url
            type: PUT
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]');
        
        const payload = JSON.stringify({"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Put.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PUT",
          CURLOPT_POSTFIELDS => '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = requests.put(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
        request.Content = new StringContent(
            @"{""user_permissions"":[{""workdrive_role"":""admin"",""users"":[{""zpuid"":""225955000000159234""}],""profiles"":[{""id"":""22595500000011234""}]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}")
            req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PUT https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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/documents/teamfolder/[TEAMFOLDERID]");
        HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]';
        
        const options = {
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PUT"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PUT"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}|json} in
          Lwt_main.run (
            Client.put ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]" -Method PUT -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
        
        response <- PUT(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PUT"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "user_permissions" : [ { "workdrive_role" : "admin", "users" : [ { "zpuid" : "225955000000159234" } ], "profiles" : [ { "id" : "22595500000011234" } ] } ] }

        Sample Response

        204 No Content

        Possible Errors

        INVALID_OPERATION HTTP 403

        RESOURCE_NOT_FOUND HTTP 404

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        PERMISSION_DENIED HTTP 500

        Delete a Team Folder

        Remove a team folder from a project.

        DELETE

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/teamfolder/[TEAMFOLDERID]

        OAuth Scope:

        ZohoProjects.documents.DELETE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/documents/teamfolder/[TEAMFOLDERID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        TEAM_FOLDER_DELETE_ERROR HTTP 500

        Associate Team Folder(s) to the Project

        Associate an existing team folder to a project.

        PUT

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/teamfolder/associate

        OAuth Scope:

        ZohoProjects.documents.UPDATE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Parameter

        Param Name
        Data Type
        Description
        workdrive_team_folder_ids

        JSONArray

        required
        max length : 10000
        array size : 0-10

        Enter team folder ID.
        To get team folder details, use the Get Project Team Folder Details.

        user_permissions

        JSONArray

        required
        max length : 100000
        array size : 0-10

        Enter the permission details for the team folder.
        To get the default team folder permission, use the Get Project Team Folder/Folder Details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PUT \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate";
        params = Map();
        params.put("workdrive_team_folder_ids", "we9i836cbd87259dd451cb7c382802145f029");
        params.put("user_permissions", [{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]);
        response = invokeUrl
        [
            url: url
            type: PUT
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate');
        
        const payload = JSON.stringify({"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Put.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PUT",
          CURLOPT_POSTFIELDS => '{"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = requests.put(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"workdrive_team_folder_ids\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate");
        request.Content = new StringContent(
            @"{""workdrive_team_folder_ids"":""we9i836cbd87259dd451cb7c382802145f029"",""user_permissions"":[{""workdrive_role"":""admin"",""users"":[{""zpuid"":""225955000000159234""}],""profiles"":[{""id"":""22595500000011234""}]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"workdrive_team_folder_ids\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"workdrive_team_folder_ids\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"workdrive_team_folder_ids\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}")
            req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PUT https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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/documents/teamfolder/associate");
        HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"workdrive_team_folder_ids\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate';
        
        const options = {
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PUT"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PUT"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"workdrive_team_folder_ids\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}|json} in
          Lwt_main.run (
            Client.put ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate" -Method PUT -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate"
        
        response <- PUT(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"workdrive_team_folder_ids\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/associate")!
        var request = URLRequest(url: url)
        request.httpMethod = "PUT"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"workdrive_team_folder_ids":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "workdrive_team_folder_ids" : "we9i836cbd87259dd451cb7c382802145f029", "user_permissions" : [ { "workdrive_role" : "admin", "users" : [ { "zpuid" : "225955000000159234" } ], "profiles" : [ { "id" : "22595500000011234" } ] } ] }

        Sample Response

        200{ "team_folders" : [ { "workdrive_folder_id" : "we9i836cbd87259dd451cb7c382802145f029", "is_personal_space" : false, "name" : "Team Folder 3", "folder_id" : "9000000005939" } ] }

        Possible Errors

        INVALID_OPERATION HTTP 403

        ASSOCIATION_ALREADY_EXISTS HTTP 500

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        Disassociate Team Folder

        Disassociate team folder(s) from a project

        DELETE

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/teamfolder/[TEAMFOLDERID]/disassociate

        OAuth Scope:

        ZohoProjects.documents.DELETE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/documents/teamfolder/[TEAMFOLDERID]/disassociate");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/teamfolder/[TEAMFOLDERID]/disassociate")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        DEFAULT_FOLDER_DISASSOCIATED HTTP 500

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        Folder

        This module covers all operations related to the folder. Use this API to create, associate, disassociate, and retrieve folder details.

        Create Project Folder(s)

        Create a folder in a project.

        POST

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

        OAuth Scope:

        ZohoProjects.documents.CREATE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 100

        Enter the name of the folder.

        parent_id

        String

        required
        max length : 200

        Enter team folder/folder ID.
        To get the folder id's, use the Get Project Team Folder/Folder Details.

        user_permissions

        JSONArray

        required
        max length : 10000

        Enter the permission details for the folder.
        To get the default folder permission, use the Get Project Team Folder/Folder Details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders";
        params = Map();
        params.put("name", "Team Folder");
        params.put("parent_id", "we9i836cbd87259dd451cb7c382802145f029");
        params.put("user_permissions", [{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders');
        
        const payload = JSON.stringify({"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Team Folder\",\"parent_id\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders");
        request.Content = new StringContent(
            @"{""name"":""Team Folder"",""parent_id"":""we9i836cbd87259dd451cb7c382802145f029"",""user_permissions"":[{""workdrive_role"":""admin"",""users"":[{""zpuid"":""225955000000159234""}],""profiles"":[{""id"":""22595500000011234""}]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Team Folder\",\"parent_id\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"Team Folder\",\"parent_id\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"Team Folder\",\"parent_id\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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/documents/folders");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"Team Folder\",\"parent_id\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"Team Folder\",\"parent_id\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"Team Folder\",\"parent_id\":\"we9i836cbd87259dd451cb7c382802145f029\",\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"Team Folder","parent_id":"we9i836cbd87259dd451cb7c382802145f029","user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "Team Folder", "parent_id" : "we9i836cbd87259dd451cb7c382802145f029", "user_permissions" : [ { "workdrive_role" : "admin", "users" : [ { "zpuid" : "225955000000159234" } ], "profiles" : [ { "id" : "22595500000011234" } ] } ] }

        Sample Response

        200{ "folder" : [ { "folder_id" : "225955000000152005", "name" : "Checkinnn", "workdrive_folder_id" : "pyafy6181f9897619441da5185dd1af5245b4", "is_personal_space" : false, "is_folder" : true, "is_default" : false, "is_customized" : false } ] }

        Possible Errors

        INVALID_OPERATION HTTP 403

        CUSTOMIZATION_LIMIT_REACHED HTTP 500

        FOLDER_CREATE_ERROR HTTP 500

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        DUPLICATE_NAME_ERROR HTTP 409

        Associate Folder(s) to the Project

        Associate folder(s) to a project.

        POST

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/folders/associate

        OAuth Scope:

        ZohoProjects.documents.UPDATE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Parameter

        Param Name
        Data Type
        Description
        workdrive_folders

        JSONArray

        max length : 10000
        array size : 0-10

        Enter the folder details.

        user_permissions

        JSONArray

        required
        max length : 100000
        array size : 0-10

        Enter the permission details for the folder.
        To get the default folder permission, use the Get Project Team Folder/Folder Details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate";
        params = Map();
        params.put("workdrive_folders", [{"id":"22595500000011234","is_customized":true}]);
        params.put("user_permissions", [{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate');
        
        const payload = JSON.stringify({"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"workdrive_folders\":[{\"id\":\"22595500000011234\",\"is_customized\":true}],\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate");
        request.Content = new StringContent(
            @"{""workdrive_folders"":[{""id"":""22595500000011234"",""is_customized"":true}],""user_permissions"":[{""workdrive_role"":""admin"",""users"":[{""zpuid"":""225955000000159234""}],""profiles"":[{""id"":""22595500000011234""}]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"workdrive_folders\":[{\"id\":\"22595500000011234\",\"is_customized\":true}],\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"workdrive_folders\":[{\"id\":\"22595500000011234\",\"is_customized\":true}],\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"workdrive_folders\":[{\"id\":\"22595500000011234\",\"is_customized\":true}],\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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/documents/folders/associate");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"workdrive_folders\":[{\"id\":\"22595500000011234\",\"is_customized\":true}],\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"workdrive_folders\":[{\"id\":\"22595500000011234\",\"is_customized\":true}],\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"workdrive_folders\":[{\"id\":\"22595500000011234\",\"is_customized\":true}],\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/associate")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"workdrive_folders":[{"id":"22595500000011234","is_customized":true}],"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "workdrive_folders" : [ { "id" : "22595500000011234", "is_customized" : true } ], "user_permissions" : [ { "workdrive_role" : "admin", "users" : [ { "zpuid" : "225955000000159234" } ], "profiles" : [ { "id" : "22595500000011234" } ] } ] }

        Sample Response

        200{ "folder" : [ { "folder_id" : "225955000000152013", "name" : "Ela - Folder - 11", "workdrive_folder_id" : "pyafyddb17b681eba4719a4f443d272bb55ba", "is_personal_space" : false, "is_folder" : true, "is_default" : false, "is_customized" : false } ] }

        Possible Errors

        INVALID_OPERATION HTTP 403

        ASSOCIATION_ALREADY_EXISTS HTTP 500

        CUSTOMIZATION_LIMIT_REACHED HTTP 500

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        ASSOCIATE_TEMPLATE_ERROR HTTP 500

        Get Project Folder Details

        Retrieve details of the folder details from a project.

        GET

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/folders/[FOLDERID]

        OAuth Scope:

        ZohoProjects.documents.READ, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/documents/folders/1752587000000097260");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "team_id" : "jurc891805595454c4ce8ae18933ff6cc77dc", "name" : "Ela - Folder - 11", "description" : null, "workdrive_folder_id" : "pyafyddb17b681eba4719a4f443d272bb55ba", "folder_id" : "225955000000152013", "user_permissions" : [ { "workdrive_role" : "editor", "profiles" : [ { "id" : "225955000000069452", "name" : "Employee" } ] }, { "workdrive_role" : "organizer", "profiles" : [ { "id" : "225955000000069449", "name" : "Manager" }, { "id" : "225955000000134013", "name" : "Custom Profile" }, { "id" : "225955000000069446", "name" : "jointadmin" } ] }, { "workdrive_role" : "commenter", "profiles" : [ { "id" : "225955000000069455", "name" : "Contractor" } ] } ] }

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        FORBIDDEN HTTP 403

        Update Project Folder Details

        Modify folder details in a project.

        PATCH

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/folders/[FOLDERID]

        OAuth Scope:

        ZohoProjects.documents.UPDATE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Parameter

        Param Name
        Data Type
        Description
        user_permissions

        JSONArray

        required
        max length : 100000
        array size : 0-10

        Enter the permission details for the folder.
        To get the default folder permission, use the Get Project Team Folder/Folder Details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260";
        params = Map();
        params.put("user_permissions", [{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]);
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260');
        
        const payload = JSON.stringify({"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260");
        request.Content = new StringContent(
            @"{""user_permissions"":[{""workdrive_role"":""admin"",""users"":[{""zpuid"":""225955000000159234""}],""profiles"":[{""id"":""22595500000011234""}]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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/documents/folders/1752587000000097260");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"user_permissions\":[{\"workdrive_role\":\"admin\",\"users\":[{\"zpuid\":\"225955000000159234\"}],\"profiles\":[{\"id\":\"22595500000011234\"}]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"user_permissions":[{"workdrive_role":"admin","users":[{"zpuid":"225955000000159234"}],"profiles":[{"id":"22595500000011234"}]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "user_permissions" : [ { "workdrive_role" : "admin", "users" : [ { "zpuid" : "225955000000159234" } ], "profiles" : [ { "id" : "22595500000011234" } ] } ] }

        Sample Response

        204 No Content

        Possible Errors

        INVALID_OPERATION HTTP 403

        RESOURCE_NOT_FOUND HTTP 404

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        PERMISSION_DENIED HTTP 500

        Disassociate Folder(s)

        Disassociate folder(s) from a project.

        DELETE

        /api/v3/portal/[PORTALID]/projects/[PROJECTID]/documents/folders/[FOLDERID]/disassociate

        OAuth Scope:

        ZohoProjects.documents.DELETE, WorkDrive.workspace.ALL,Workdrive.team.ALL,WorkDrive.files.ALL

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/documents/folders/1752587000000097260/disassociate");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/documents/folders/1752587000000097260/disassociate")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        DEFAULT_FOLDER_DISASSOCIATED HTTP 500

        UNKNOWN_WORKDRIVE_ERROR HTTP 500

        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.team.ALL,WorkDrive.files.ALL

        Query Parameter

        Param Name
        Data Type
        Description
        entity_type

        String

        required

        Enter the module name.
        Default 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
        For custom modules, use the Get List of Modules API with the filter is_customized = 'true' and use the returned 'api_name' value as the entity_type.
        For comments under a custom module, use the format 'api_name'_cm_comment_

        entity_id

        long

        required

        Enter the entity ID.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments?entity_type=task&entity_id=1752587000000097299' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments";
        params = Map();
        params.put("entity_type", "task");
        params.put("entity_id", "1752587000000097299");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments');
        url.searchParams.append('entity_type', 'task');
        url.searchParams.append('entity_id', '1752587000000097299');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments")
        params = {
          "entity_type" => "task",
          "entity_id" => "1752587000000097299"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'entity_type' => 'task',
            'entity_id' => '1752587000000097299',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments"
        
        params = {
            "entity_type": "task",
            "entity_id": "1752587000000097299"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_entity_type = curl_easy_escape(curl, "task", 0);
                char *enc_entity_id = curl_easy_escape(curl, "1752587000000097299", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments?entity_type=%s&entity_id=%s", enc_entity_type, enc_entity_id);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_entity_type);
                curl_free(enc_entity_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["entity_type"] = "task";
        query["entity_id"] = "1752587000000097299";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_entity_type = curl_easy_escape(curl, "task", 0);
                char* enc_entity_id = curl_easy_escape(curl, "1752587000000097299", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments";
                url += "?entity_type=" + std::string(enc_entity_type);
                url += "&entity_id=" + std::string(enc_entity_id);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_entity_type);
                curl_free(enc_entity_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-entity_type (java.net.URLEncoder/encode "task" "UTF-8")
              enc-entity_id (java.net.URLEncoder/encode "1752587000000097299" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments" "?entity_type=" enc-entity_type "&entity_id=" enc-entity_id)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments", nil)
            q := req.URL.Query()
            q.Add("entity_type", "task")
            q.Add("entity_id", "1752587000000097299")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments?entity_type=task&entity_id=1752587000000097299 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("entity_type", "task");
        uriBuilder.addParameter("entity_id", "1752587000000097299");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments';
        
        const params = new URLSearchParams({
          'entity_type': 'task',
          'entity_id': '1752587000000097299'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        entity_type = "task"
        entity_id = "1752587000000097299"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("entity_type", "task")
            urlBuilder.addQueryParameter("entity_id", "1752587000000097299")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedEntity_type = [@"task" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntity_id = [@"1752587000000097299" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments?entity_type=%@&entity_id=%@", encodedEntity_type, encodedEntity_id];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_entity_type = Uri.pct_encode "task" in
          let enc_entity_id = Uri.pct_encode "1752587000000097299" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments" ^ "?entity_type=" ^ enc_entity_type ^ "&entity_id=" ^ enc_entity_id) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            entity_type = "task"
            entity_id = "1752587000000097299"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments"
        
        params <- list(
          entity_type = "task",
          entity_id = "1752587000000097299"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments")!
        components.queryItems = [
            URLQueryItem(name: "entity_type", value: "task"),
            URLQueryItem(name: "entity_id", value: "1752587000000097299")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        entity_type : "task" entity_id : "1752587000000097299"

        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", "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", "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", "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", "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", "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", "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", "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", "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", "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", "uploadedZpuid" : "170876000007981001", "trashed" : false } ] }

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        INVALID_PARAMETER_VALUE HTTP 400

        REQUIRED_PARAMETER_MISSING HTTP 400

        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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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", "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", "uploadedZpuid" : "170876000007981001", "trashed" : false } ] }

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        Upload Global 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 location details of the attachments.

        upload_file

        file

        required
        max size : 125mb
        limit : 0-10

        Specify the file or files to be uploaded.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/attachments' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        --form 'upload_file=@/path/to/file' \
        --form '"attachment_details" = {"location_details":{"folder_id":"170876000015521124","project_id":"170876000015521678"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments";
        
        fileObj = invokeUrl
        [
            url: "/path/to/file"
            type: GET
        ];
        
        response = invokeUrl
        [
            url: url
            type: POST
            files: {"upload_file": fileObj}
            connection: "projects"
        ];
        
        info response;
        
        const fs = require('fs');
        const FormData = require('form-data');
        const https = require('https');
        
        const form = new FormData();
        form.append('upload_file', fs.createReadStream('/path/to/file'));
        
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/attachments');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            ...form.getHeaders()
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        form.pipe(req);
        
        require 'net/http'
        require 'uri'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/attachments")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post::Multipart.new(url, {
          "upload_file" => UploadIO.new(File.new("/path/to/file"), "application/octet-stream")
        })
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments";
        
        $postFields = [
            'upload_file' => new CURLFile('/path/to/file'),
        ];
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => $postFields,
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        files = {
            "upload_file": open("/path/to/file", "rb")
        }
        
        response = requests.post(url, headers=headers, files=files)
        
        print(response.json())
        
        #include <stdio.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                curl_mime *mime = curl_mime_init(curl);
                curl_mimepart *part = curl_mime_addpart(mime);
                curl_mime_name(part, "upload_file");
                curl_mime_filedata(part, "/path/to/file");
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_mime_free(mime);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var content = new MultipartFormDataContent();
        var fileStream = File.OpenRead("/path/to/file");
        content.Add(new StreamContent(fileStream), "upload_file", "file");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments") { Content = content };
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
        
                curl_mime* mime = curl_mime_init(curl);
                curl_mimepart* part = curl_mime_addpart(mime);
                curl_mime_name(part, "upload_file");
                curl_mime_filedata(part, "/path/to/file");
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_MIMEPOST, mime);
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_mime_free(mime);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        (require '[clojure.java.io :as io])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :multipart [{:name "upload_file"
                          :content (io/file "/path/to/file")}]}))
        
        (println (:body response))
        
        package main
        
        import (
            "bytes"
            "fmt"
            "io"
            "mime/multipart"
            "net/http"
            "os"
        )
        
        func main() {
            body := &bytes.Buffer{}
            writer := multipart.NewWriter(body)
        
            file, _ := os.Open("/path/to/file")
            defer file.Close()
            part, _ := writer.CreateFormFile("upload_file", "file")
            io.Copy(part, file)
            writer.Close()
        
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments", body)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", writer.FormDataContentType())
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            respBody, _ := io.ReadAll(resp.Body)
            fmt.Println(string(respBody))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/attachments HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: multipart/form-data; boundary=----FormBoundary
        
        ------FormBoundary
        Content-Disposition: form-data; name="upload_file"; filename="file"
        Content-Type: application/octet-stream
        
        [file content]
        ------FormBoundary--
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        HttpEntityEnclosingRequestBase httpRequest = new HttpPost("https://projectsapi.zoho.com/api/v3/portal/739121528/attachments");
        httpRequest.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        MultipartEntityBuilder builder = MultipartEntityBuilder.create();
        builder.addBinaryBody("upload_file", new File("/path/to/file"), ContentType.DEFAULT_BINARY, "file");
        httpRequest.setEntity(builder.build());
        
        HttpResponse response = httpclient.execute(httpRequest);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const formData = new FormData();
        formData.append('upload_file', fileInput.files[0]);
        
        fetch('https://projectsapi.zoho.com/api/v3/portal/739121528/attachments', {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          },
          body: formData
        })
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {
          "upload_file": "(binary file data)"
        }
        import okhttp3.*
        import okhttp3.MediaType.Companion.toMediaType
        import java.io.File
        
        fun main() {
            val client = OkHttpClient()
        
            val file = File("/path/to/file")
            val body = MultipartBody.Builder()
                .setType(MultipartBody.FORM)
                .addFormDataPart("upload_file", file.name, RequestBody.create(file, "application/octet-stream".toMediaType()))
                .build()
        
            val request = Request.Builder()
                .url("https://projectsapi.zoho.com/api/v3/portal/739121528/attachments")
                .method("POST", body)
                .addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
                .build()
        
            val response = client.newCall(request).execute()
            println(response.body?.string())
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/attachments"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSString *boundary = [[NSUUID UUID] UUIDString];
        [request setValue:[NSString stringWithFormat:@"multipart/form-data; boundary=%@", boundary] forHTTPHeaderField:@"Content-Type"];
        
        NSMutableData *body = [NSMutableData data];
        NSData *fileData = [NSData dataWithContentsOfFile:@"/path/to/file"];
        [body appendData:[[NSString stringWithFormat:@"--%@\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"Content-Disposition: form-data; name=\"upload_file\"; filename=\"file\"\r\n"] dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[@"Content-Type: application/octet-stream\r\n\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:fileData];
        [body appendData:[@"\r\n" dataUsingEncoding:NSUTF8StringEncoding]];
        [body appendData:[[NSString stringWithFormat:@"--%@--\r\n", boundary] dataUsingEncoding:NSUTF8StringEncoding]];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments" in
          let file_content = Lwt_io.(with_file ~mode:Input "/path/to/file" read) in
          let boundary = "----FormBoundary" in
          let body_str =
            "--" ^ boundary ^ "\r\n" ^
            "Content-Disposition: form-data; name=\"upload_file\"; filename=\"file\"\r\n" ^
            "Content-Type: application/octet-stream\r\n\r\n" ^
            file_content ^ "\r\n" ^
            "--" ^ boundary ^ "--\r\n" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" ("multipart/form-data; boundary=" ^ boundary)
          in
          let body = Cohttp_lwt.Body.of_string body_str in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $form = @{
            upload_file = Get-Item -Path "/path/to/file"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments" -Method POST -Headers $headers -Form $form
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          body = list(
            upload_file = upload_file("/path/to/file")
          ),
          encode = "multipart"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/attachments")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let boundary = UUID().uuidString
        request.setValue("multipart/form-data; boundary=\(boundary)", forHTTPHeaderField: "Content-Type")
        
        var body = Data()
        let fileData = try! Data(contentsOf: URL(fileURLWithPath: "/path/to/file"))
        body.append("--\(boundary)\r\n".data(using: .utf8)!)
        body.append("Content-Disposition: form-data; name=\"upload_file\"; filename=\"file\"\r\n".data(using: .utf8)!)
        body.append("Content-Type: application/octet-stream\r\n\r\n".data(using: .utf8)!)
        body.append(fileData)
        body.append("\r\n".data(using: .utf8)!)
        body.append("--\(boundary)--\r\n".data(using: .utf8)!)
        request.httpBody = body
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        "attachment_details" : { "location_details" : { "folder_id" : "170876000015521124", "project_id" : "170876000015521678" } }

        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", "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", "uploadedZpuid" : "170876000007981001", "trashed" : false } ] }

        Possible Errors

        FILE_LIMIT_EXCEEDED HTTP 400

        FILE_SIZE_EXCEEDED HTTP 413

        INVALID_PARAMETER_VALUE HTTP 400

        FORBIDDEN HTTP 403

        REQUIRED_PARAMETER_MISSING HTTP 400

        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.
        Default 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
        For custom modules, use the Get List of Modules API with the filter is_customized = 'true' and use the returned 'api_name' value as the entity_type.
        For comments under a custom module, use the format 'api_name'_cm_comment_

        entity_id

        long

        required

        Enter the entity ID.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form 'entity_type = "task"' --form 'entity_id = "1752587000000097299"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260";
        params = Map();
        params.put("entity_type", "task");
        params.put("entity_id", "1752587000000097299");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260');
        url.searchParams.append('entity_type', 'task');
        url.searchParams.append('entity_id', '1752587000000097299');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260")
        params = {
          "entity_type" => "task",
          "entity_id" => "1752587000000097299"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'entity_type' => 'task',
            'entity_id' => '1752587000000097299',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"
        
        params = {
            "entity_type": "task",
            "entity_id": "1752587000000097299"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_entity_type = curl_easy_escape(curl, "task", 0);
                char *enc_entity_id = curl_easy_escape(curl, "1752587000000097299", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260?entity_type=%s&entity_id=%s", enc_entity_type, enc_entity_id);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_entity_type);
                curl_free(enc_entity_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["entity_type"] = "task";
        query["entity_id"] = "1752587000000097299";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_entity_type = curl_easy_escape(curl, "task", 0);
                char* enc_entity_id = curl_easy_escape(curl, "1752587000000097299", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260";
                url += "?entity_type=" + std::string(enc_entity_type);
                url += "&entity_id=" + std::string(enc_entity_id);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_entity_type);
                curl_free(enc_entity_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-entity_type (java.net.URLEncoder/encode "task" "UTF-8")
              enc-entity_id (java.net.URLEncoder/encode "1752587000000097299" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" "?entity_type=" enc-entity_type "&entity_id=" enc-entity_id)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260", nil)
            q := req.URL.Query()
            q.Add("entity_type", "task")
            q.Add("entity_id", "1752587000000097299")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260?entity_type=task&entity_id=1752587000000097299 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("entity_type", "task");
        uriBuilder.addParameter("entity_id", "1752587000000097299");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260';
        
        const params = new URLSearchParams({
          'entity_type': 'task',
          'entity_id': '1752587000000097299'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        entity_type = "task"
        entity_id = "1752587000000097299"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("entity_type", "task")
            urlBuilder.addQueryParameter("entity_id", "1752587000000097299")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedEntity_type = [@"task" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntity_id = [@"1752587000000097299" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260?entity_type=%@&entity_id=%@", encodedEntity_type, encodedEntity_id];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_entity_type = Uri.pct_encode "task" in
          let enc_entity_id = Uri.pct_encode "1752587000000097299" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" ^ "?entity_type=" ^ enc_entity_type ^ "&entity_id=" ^ enc_entity_id) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            entity_type = "task"
            entity_id = "1752587000000097299"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"
        
        params <- list(
          entity_type = "task",
          entity_id = "1752587000000097299"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260")!
        components.queryItems = [
            URLQueryItem(name: "entity_type", value: "task"),
            URLQueryItem(name: "entity_id", value: "1752587000000097299")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        entity_type : "task" entity_id : "1752587000000097299"

        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 } ] }

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        INVALID_PARAMETER_VALUE HTTP 400

        FORBIDDEN HTTP 403

        REQUIRED_PARAMETER_MISSING HTTP 400

        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.
        Default 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
        For custom modules, use the Get List of Modules API with the filter is_customized = 'true' and use the returned 'api_name' value as the entity_type.
        For comments under a custom module, use the format 'api_name'_cm_comment_

        entity_id

        long

        required

        Enter the entity ID.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260?entity_type=task&entity_id=1752587000000097299' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260";
        params = Map();
        params.put("entity_type", "task");
        params.put("entity_id", "1752587000000097299");
        response = invokeUrl
        [
            url: url
            type: DELETE
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260');
        url.searchParams.append('entity_type', 'task');
        url.searchParams.append('entity_id', '1752587000000097299');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260")
        params = {
          "entity_type" => "task",
          "entity_id" => "1752587000000097299"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'entity_type' => 'task',
            'entity_id' => '1752587000000097299',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"
        
        params = {
            "entity_type": "task",
            "entity_id": "1752587000000097299"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_entity_type = curl_easy_escape(curl, "task", 0);
                char *enc_entity_id = curl_easy_escape(curl, "1752587000000097299", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260?entity_type=%s&entity_id=%s", enc_entity_type, enc_entity_id);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_entity_type);
                curl_free(enc_entity_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["entity_type"] = "task";
        query["entity_id"] = "1752587000000097299";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Delete, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_entity_type = curl_easy_escape(curl, "task", 0);
                char* enc_entity_id = curl_easy_escape(curl, "1752587000000097299", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260";
                url += "?entity_type=" + std::string(enc_entity_type);
                url += "&entity_id=" + std::string(enc_entity_id);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_entity_type);
                curl_free(enc_entity_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-entity_type (java.net.URLEncoder/encode "task" "UTF-8")
              enc-entity_id (java.net.URLEncoder/encode "1752587000000097299" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" "?entity_type=" enc-entity_type "&entity_id=" enc-entity_id)]
        (def response
          (client/delete url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260", nil)
            q := req.URL.Query()
            q.Add("entity_type", "task")
            q.Add("entity_id", "1752587000000097299")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260?entity_type=task&entity_id=1752587000000097299 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("entity_type", "task");
        uriBuilder.addParameter("entity_id", "1752587000000097299");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260';
        
        const params = new URLSearchParams({
          'entity_type': 'task',
          'entity_id': '1752587000000097299'
        });
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        entity_type = "task"
        entity_id = "1752587000000097299"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("entity_type", "task")
            urlBuilder.addQueryParameter("entity_id", "1752587000000097299")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedEntity_type = [@"task" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntity_id = [@"1752587000000097299" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260?entity_type=%@&entity_id=%@", encodedEntity_type, encodedEntity_id];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_entity_type = Uri.pct_encode "task" in
          let enc_entity_id = Uri.pct_encode "1752587000000097299" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" ^ "?entity_type=" ^ enc_entity_type ^ "&entity_id=" ^ enc_entity_id) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            entity_type = "task"
            entity_id = "1752587000000097299"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260"
        
        params <- list(
          entity_type = "task",
          entity_id = "1752587000000097299"
        )
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/attachments/1752587000000097260")!
        components.queryItems = [
            URLQueryItem(name: "entity_type", value: "task"),
            URLQueryItem(name: "entity_id", value: "1752587000000097299")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        entity_type : "task" entity_id : "1752587000000097299"

        Sample Response

        204 No Content

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        INVALID_PARAMETER_VALUE HTTP 400

        FORBIDDEN HTTP 403

        REQUIRED_PARAMETER_MISSING HTTP 400

        Dashboards

        This module covers operations related to dashboards within Zoho Projects. Use this API to generate, export, and retrieve dashboards.

        Get Dashboard details list

        To get the Dashboard details

        GET

        /api/v3/portal/[PORTALID]/dashboards

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        project_id

        long

        Enter the Project ID

        page

        int

        Enter the page number.

        per_page

        int

        Enter the number of entries to be displayed per page.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards?project_id=23806000097545166&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards";
        params = Map();
        params.put("project_id", "23806000097545166");
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards');
        url.searchParams.append('project_id', '23806000097545166');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards")
        params = {
          "project_id" => "23806000097545166",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'project_id' => '23806000097545166',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards"
        
        params = {
            "project_id": "23806000097545166",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards?project_id=%s&page=%s&per_page=%s", enc_project_id, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_project_id);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["project_id"] = "23806000097545166";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards";
                url += "?project_id=" + std::string(enc_project_id);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_project_id);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards" "?project_id=" enc-project_id "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards", nil)
            q := req.URL.Query()
            q.Add("project_id", "23806000097545166")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards?project_id=23806000097545166&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/dashboards");
        uriBuilder.addParameter("project_id", "23806000097545166");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards';
        
        const params = new URLSearchParams({
          'project_id': '23806000097545166',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        project_id = "23806000097545166"
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("project_id", "23806000097545166")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards?project_id=%@&page=%@&per_page=%@", encodedProject_id, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_project_id = Uri.pct_encode "23806000097545166" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards" ^ "?project_id=" ^ enc_project_id ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            project_id = "23806000097545166"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards"
        
        params <- list(
          project_id = "23806000097545166",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards")!
        components.queryItems = [
            URLQueryItem(name: "project_id", value: "23806000097545166"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        project_id : "23806000097545166" page : "1" per_page : "10"

        Sample Response

        200{ "folders" : [ { "id" : "5000000009011", "name" : "Ryan Dashboard", "created_time" : "2025-10-24T10:29:42.724Z", "updated_time" : "2025-10-24T13:13:18.132Z", "is_global_view" : false, "associated_project" : { "id" : 5000000006217 }, "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" } } ], "page_info" : { "page" : 1, "per_page" : 100, "page_count" : 3, "has_next_page" : false } }
        Get Dashboard Details

        To get the dashboard details

        GET

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]

        OAuth Scope:

        ZohoProjects.portals.READ

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/dashboards/[DASHBOARDID]");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "id" : "5000000009011", "name" : "Ryan Dashboard", "created_time" : "2025-10-24T10:29:42.724Z", "updated_time" : "2025-10-24T13:13:18.132Z", "is_global_view" : false, "associated_project" : { "id" : "5000000006217" }, "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "reports" : [ { "id" : "5000000017001", "name" : "Untitled_Widget_1", "folder" : { "id" : "5000000009011" }, "chart_type" : "sunburst", "sequence" : "1", "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "created_time" : "2025-11-05T10:12:43.199Z", "updated_time" : "2025-11-05T10:12:43.199Z", "chart_configuration" : [ { "group_by" : [ "percentage", "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "widget_configuration" : { "w" : "14", "h" : "10" }, "module" : { "id" : "5000000000146", "name" : "Task" }, "report_type" : "customreport" } ] }
        Create Dashboard

        Create Dashboard in Global

        POST

        /api/v3/portal/[PORTALID]/dashboards

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 200

        Enter the name of the dashboard

        description

        String

        max length : 10000

        Enter the description of the dashboard

        access_type

        String

        Enter the access type Accepted values: all,user

        JSONObject

        Enter the project information.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("access_type", "-");
        params.put("project", {"id":"4000000062001"});
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards');
        
        const payload = JSON.stringify({"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""access_type"":""-"",""project"":{""id"":""4000000062001""}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"}}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","access_type":"-","project":{"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/dashboards");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"}}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "access_type" : "-", "project" : { "id" : "4000000062001" } }

        Sample Response

        201{ "id" : "5000000019023", "name" : "Untitled Dashboard", "created_time" : "2025-11-05T13:13:34.815Z", "updated_time" : "2025-11-05T13:13:34.816Z", "is_global_view" : false, "associated_project" : { "id" : "5000000006217" }, "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" } }
        Update Dashboard

        To update the dashboard details

        PATCH

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        max length : 200

        Enter the name of the dashboard

        description

        String

        max length : 10000

        Enter the description of the dashboard

        JSONObject

        Enter the project information.

        bg_theme

        String

        Dashboard background theme
        Accepted values: none,theme_1,theme_2,theme_3,theme_4,theme_5,theme_6,theme_7,theme_8,theme_9

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("project", {"id":"4000000062001"});
        params.put("bg_theme", "-");
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]');
        
        const payload = JSON.stringify({"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"bg_theme\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""project"":{""id"":""4000000062001""},""bg_theme"":""-""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"bg_theme\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"bg_theme\":\"-\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"bg_theme\":\"-\"}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"bg_theme\":\"-\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"bg_theme\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"bg_theme\":\"-\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","project":{"id":"4000000062001"},"bg_theme":"-"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "project" : { "id" : "4000000062001" }, "bg_theme" : "-" }

        Sample Response

        200{ "id" : "5000000019023", "name" : "Dashboard", "created_time" : "2025-11-05T13:13:34.815Z", "updated_time" : "2025-11-05T13:13:43.618Z", "is_global_view" : false, "associated_project" : { "id" : "5000000006217" }, "bg_theme" : "theme_3", "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" } }
        Clone Dashboard

        To clone the dashboard

        POST

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]/clone

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone";
        response = invokeUrl
        [
            url: url
            type: POST
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/dashboards/[DASHBOARDID]/clone");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone" -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/clone")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        201{ "id" : "5000000019007", "name" : "Ryan Dashboard(1)", "created_time" : "2025-11-05T13:11:56.996Z", "updated_time" : "2025-11-05T13:11:56.996Z", "is_global_view" : false, "associated_project" : { "id" : "5000000006217" }, "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "reports" : [ { "id" : "5000000019009", "name" : "Untitled_Widget_1", "folder" : { "id" : "5000000019007" }, "chart_type" : "sunburst", "sequence" : "1", "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "created_time" : "2025-11-05T13:11:57.009Z", "updated_time" : "2025-11-05T13:11:57.009Z", "chart_configuration" : [ { "group_by" : [ "percentage", "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "widget_configuration" : { "x" : "0", "y" : "0", "w" : "14", "h" : "10" }, "module" : { "id" : "5000000000146", "name" : "Task" }, "report_type" : "customreport" } ] }
        Move Dashboard

        To move the dashboard

        POST

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]/move

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        to_project

        JSONObject

        Enter the toProject information.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"to_project":{"id":"4000000062001"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move";
        params = Map();
        params.put("to_project", {"id":"4000000062001"});
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move');
        
        const payload = JSON.stringify({"to_project":{"id":"4000000062001"}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"to_project":{"id":"4000000062001"}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"to_project":{"id":"4000000062001"}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"to_project":{"id":"4000000062001"}}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move");
        request.Content = new StringContent(
            @"{""to_project"":{""id"":""4000000062001""}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"to_project\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"to_project\":{\"id\":\"4000000062001\"}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"to_project\":{\"id\":\"4000000062001\"}}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"to_project":{"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/dashboards/[DASHBOARDID]/move");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"to_project\":{\"id\":\"4000000062001\"}}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"to_project":{"id":"4000000062001"}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"to_project":{"id":"4000000062001"}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"to_project":{"id":"4000000062001"}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"to_project\":{\"id\":\"4000000062001\"}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"to_project":{"id":"4000000062001"}}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"to_project":{"id":"4000000062001"}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"to_project\":{\"id\":\"4000000062001\"}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/move")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"to_project":{"id":"4000000062001"}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "to_project" : { "id" : "4000000062001" } }

        Sample Response

        204 No Content
        Share Dashboard

        To share the dashboard to the users

        POST

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]/share

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        users_access_level

        String

        Access level of the Portal/Project Users

        client_users_access_level

        String

        Access level of the Client Users

        shared_users

        JSONArray

        Access level of the shared Users in json array

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share";
        params = Map();
        params.put("users_access_level", "-");
        params.put("client_users_access_level", "-");
        params.put("shared_users", [{"zpuid":"4000000002055","access_level":"-"}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share');
        
        const payload = JSON.stringify({"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"users_access_level\":\"-\",\"client_users_access_level\":\"-\",\"shared_users\":[{\"zpuid\":\"4000000002055\",\"access_level\":\"-\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share");
        request.Content = new StringContent(
            @"{""users_access_level"":""-"",""client_users_access_level"":""-"",""shared_users"":[{""zpuid"":""4000000002055"",""access_level"":""-""}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"users_access_level\":\"-\",\"client_users_access_level\":\"-\",\"shared_users\":[{\"zpuid\":\"4000000002055\",\"access_level\":\"-\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"users_access_level\":\"-\",\"client_users_access_level\":\"-\",\"shared_users\":[{\"zpuid\":\"4000000002055\",\"access_level\":\"-\"}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"users_access_level\":\"-\",\"client_users_access_level\":\"-\",\"shared_users\":[{\"zpuid\":\"4000000002055\",\"access_level\":\"-\"}]}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"users_access_level\":\"-\",\"client_users_access_level\":\"-\",\"shared_users\":[{\"zpuid\":\"4000000002055\",\"access_level\":\"-\"}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"users_access_level\":\"-\",\"client_users_access_level\":\"-\",\"shared_users\":[{\"zpuid\":\"4000000002055\",\"access_level\":\"-\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"users_access_level\":\"-\",\"client_users_access_level\":\"-\",\"shared_users\":[{\"zpuid\":\"4000000002055\",\"access_level\":\"-\"}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/share")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"users_access_level":"-","client_users_access_level":"-","shared_users":[{"zpuid":"4000000002055","access_level":"-"}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "users_access_level" : "-", "client_users_access_level" : "-", "shared_users" : [ { "zpuid" : "4000000002055", "access_level" : "-" } ] }

        Sample Response

        200{ "shared_users" : [ { "zuid" : "43499956", "zpuid" : "5000000006347", "name" : "Ryan", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell", "access_level" : "view" } ], "users_access_level" : "none", "client_users_access_level" : "none" }
        Reorder Dashboard Widgets

        To reorder the dashboard widgets

        POST

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]/reorder

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description

        JSONArray

        max length : 10000
        array size : 1-100

        Reorder Widgets Array

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder";
        params = Map();
        params.put("widgets", [{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder');
        
        const payload = JSON.stringify({"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"widgets\":[{\"id\":\"4000000062001\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder");
        request.Content = new StringContent(
            @"{""widgets"":[{""id"":""4000000062001"",""widget_configuration"":{""x"":""-"",""y"":""-"",""h"":""-"",""w"":""-""}}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"widgets\":[{\"id\":\"4000000062001\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"widgets\":[{\"id\":\"4000000062001\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"widgets\":[{\"id\":\"4000000062001\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}}]}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"widgets\":[{\"id\":\"4000000062001\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"widgets\":[{\"id\":\"4000000062001\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"widgets\":[{\"id\":\"4000000062001\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/reorder")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"widgets":[{"id":"4000000062001","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"}}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "widgets" : [ { "id" : "4000000062001", "widget_configuration" : { "x" : "-", "y" : "-", "h" : "-", "w" : "-" } } ] }

        Sample Response

        200{ "id" : "5000000009011", "name" : "Ryan Dashboard", "created_time" : "2025-11-05T13:10:45.935Z", "updated_time" : "2025-11-05T13:10:45.935Z", "is_global_view" : false, "associated_project" : { "id" : "5000000006217" }, "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "reports" : [ { "id" : "5000000017001", "name" : "Untitled_Widget_1", "folder" : { "id" : "5000000009011" }, "chart_type" : "sunburst", "sequence" : "1", "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "created_time" : "2025-11-05T13:10:45.957Z", "updated_time" : "2025-11-05T13:10:45.957Z", "chart_configuration" : [ { "group_by" : [ "percentage", "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "widget_configuration" : { "x" : "0", "y" : "0", "w" : "14", "h" : "10" }, "module" : { "id" : "5000000000146", "name" : "Task" }, "report_type" : "customreport" } ] }
        Export Dashboard

        Export Dashboard

        POST

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]/export

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        access_code

        String

        max length : 50

        Specify the access code

        view_type

        String

        Export View type
        Accepted values: layout_view,full_view

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"access_code":"-","view_type":"date"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export";
        params = Map();
        params.put("access_code", "-");
        params.put("view_type", "date");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export');
        
        const payload = JSON.stringify({"access_code":"-","view_type":"date"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"access_code":"-","view_type":"date"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"access_code":"-","view_type":"date"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"access_code":"-","view_type":"date"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"access_code\":\"-\",\"view_type\":\"date\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export");
        request.Content = new StringContent(
            @"{""access_code"":""-"",""view_type"":""date""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"access_code\":\"-\",\"view_type\":\"date\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"access_code\":\"-\",\"view_type\":\"date\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"access_code\":\"-\",\"view_type\":\"date\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"access_code":"-","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/dashboards/[DASHBOARDID]/export");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"access_code\":\"-\",\"view_type\":\"date\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"access_code":"-","view_type":"date"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"access_code":"-","view_type":"date"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"access_code":"-","view_type":"date"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"access_code\":\"-\",\"view_type\":\"date\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"access_code":"-","view_type":"date"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"access_code":"-","view_type":"date"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"access_code\":\"-\",\"view_type\":\"date\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/export")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"access_code":"-","view_type":"date"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "access_code" : "-", "view_type" : "date" }

        Sample Response

        202
        Delete Dashboard

        To delete the dashboard

        DELETE

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]

        OAuth Scope:

        ZohoProjects.portals.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/dashboards/[DASHBOARDID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Get Default View for Dashboard

        Get Default View for Dashboard

        GET

        /api/v3/portal/[PORTALID]/dashboards/view

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        project_id

        long

        Enter the Project ID

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view?project_id=23806000097545166' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view";
        params = Map();
        params.put("project_id", "23806000097545166");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view');
        url.searchParams.append('project_id', '23806000097545166');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view")
        params = {
          "project_id" => "23806000097545166"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'project_id' => '23806000097545166',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view"
        
        params = {
            "project_id": "23806000097545166"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view?project_id=%s", enc_project_id);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_project_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["project_id"] = "23806000097545166";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view";
                url += "?project_id=" + std::string(enc_project_id);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_project_id);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view" "?project_id=" enc-project_id)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view", nil)
            q := req.URL.Query()
            q.Add("project_id", "23806000097545166")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view?project_id=23806000097545166 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/dashboards/view");
        uriBuilder.addParameter("project_id", "23806000097545166");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view';
        
        const params = new URLSearchParams({
          'project_id': '23806000097545166'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        project_id = "23806000097545166"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("project_id", "23806000097545166")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view?project_id=%@", encodedProject_id];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_project_id = Uri.pct_encode "23806000097545166" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view" ^ "?project_id=" ^ enc_project_id) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            project_id = "23806000097545166"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view"
        
        params <- list(
          project_id = "23806000097545166"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/view")!
        components.queryItems = [
            URLQueryItem(name: "project_id", value: "23806000097545166")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        project_id : "23806000097545166"

        Sample Response

        200{ "default_view_id" : "5000000009011" }
        Set Default View for Dashboard

        Set Default View for Dashboard

        POST

        /api/v3/portal/[PORTALID]/dashboards/[DASHBOARDID]/view

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view";
        response = invokeUrl
        [
            url: url
            type: POST
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/dashboards/[DASHBOARDID]/view");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view" -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/dashboards/[DASHBOARDID]/view")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content

        Get Gallery Data for Dashboard

        GET

        OAuth Scope:

        Query Parameter

        Param Name
        Data Type
        Description
        project_id

        long

        Enter the Project ID

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        Sample Input

        Sample Response

        Widget

        This module covers operations related to widgets in dashboard within Zoho Projects.

        Create Widget

        Create widget for the dashboard

        POST

        /api/v3/portal/[PORTALID]/widgets

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 100

        Enter the name of the widget

        description

        String

        max length : 500

        description of the widget

        JSONObject

        Enter the associated dashboard ID

        module_name

        String

        required

        Enter the name of the module.

        chart_type

        String

        required

        Enter the chart type
        Accepted values: bar,hbar,pie,donut,stacked,hstacked,clustered,hclustered,sunburst,line,area,embed,analytics,kpi

        chart_configuration

        JSONArray

        array size : 1-2

        Specify the chart configuration.

        JSONObject

        Details for time widget Span

        widget_configuration

        JSONArray

        Widget Configuration

        additional_info

        JSONObject

        max length : 1000
        array size : >=0

        additional fields

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("folder", {"id":"4000000062001"});
        params.put("module_name", "-");
        params.put("chart_type", "-");
        params.put("chart_configuration", [{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}]);
        params.put("timespan", {"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"});
        params.put("widget_configuration", [{"x":"-","y":"-","h":"-","w":"-"}]);
        params.put("additional_info", {"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}});
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/widgets');
        
        const payload = JSON.stringify({"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}],\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""folder"":{""id"":""4000000062001""},""module_name"":""-"",""chart_type"":""-"",""chart_configuration"":[{""report_field"":""-"",""aggregate_function"":""-"",""group_by"":""-"",""embed_url"":""-"",""kpi_widget_position_type"":""-"",""is_dashboard"":""-"",""analytics_id"":""-""}],""timespan"":{""offsetleft"":""-"",""offsetright"":""-"",""type"":""Task"",""from"":""-"",""to"":""-""},""widget_configuration"":[{""x"":""-"",""y"":""-"",""h"":""-"",""w"":""-""}],""additional_info"":{""cumulative"":""-"",""kpi_settings"":{""kpi_symbol_direction"":""-"",""kpi_numeric_symbol"":""-"",""kpi_precision_type"":""-"",""kpi_precision"":""-"",""kpi_widget_position_type"":""-""}}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}],\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}],\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}],\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}}}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/widgets HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}],\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}}}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/widgets"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}],\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}],\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}],"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "folder" : { "id" : "4000000062001" }, "module_name" : "-", "chart_type" : "-", "chart_configuration" : [ { "report_field" : "-", "aggregate_function" : "-", "group_by" : "-", "embed_url" : "-", "kpi_widget_position_type" : "-", "is_dashboard" : "-", "analytics_id" : "-" } ], "timespan" : { "offsetleft" : "-", "offsetright" : "-", "type" : "Task", "from" : "-", "to" : "-" }, "widget_configuration" : [ { "x" : "-", "y" : "-", "h" : "-", "w" : "-" } ], "additional_info" : { "cumulative" : "-", "kpi_settings" : { "kpi_symbol_direction" : "-", "kpi_numeric_symbol" : "-", "kpi_precision_type" : "-", "kpi_precision" : "-", "kpi_widget_position_type" : "-" } } }

        Sample Response

        201{ "id" : "5000000019069", "name" : "Untitled_Widget_1", "folder" : { "id" : "5000000009011" }, "chart_type" : "bar", "sequence" : "1", "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "created_time" : "2025-11-06T12:53:51.840Z", "updated_time" : "2025-11-06T12:53:51.840Z", "chart_configuration" : [ { "group_by" : [ "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "widget_configuration" : { "w" : "14", "h" : "10" }, "module" : { "id" : "5000000000146", "name" : "Task" }, "report_type" : "customreport" }
        Update Widget

        Update widget for the dashboard

        PATCH

        /api/v3/portal/[PORTALID]/widgets/[WIDGETID]

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        max length : 100

        Enter the name of the widget

        description

        String

        max length : 500

        description of the widget

        chart_type

        String

        Enter the chart type
        Accepted values: bar,hbar,pie,donut,stacked,hstacked,clustered,hclustered,sunburst,line,area,kpi

        chart_configuration

        JSONArray

        array size : 1-2

        Specify the chart configuration.

        JSONObject

        Enter the associated folder ID

        JSONObject

        Details for time widget Span

        additional_info

        JSONObject

        max length : 1000
        array size : >=0

        additional fields

        widget_configuration

        JSONArray

        Widget Configuration

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("chart_type", "-");
        params.put("chart_configuration", [{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}]);
        params.put("folder", {"id":"4000000062001"});
        params.put("timespan", {"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"});
        params.put("additional_info", {"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}});
        params.put("widget_configuration", [{"x":"-","y":"-","h":"-","w":"-"}]);
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]');
        
        const payload = JSON.stringify({"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""chart_type"":""-"",""chart_configuration"":[{""report_field"":""-"",""aggregate_function"":""-"",""group_by"":""-"",""embed_url"":""-"",""kpi_widget_position_type"":""-"",""is_dashboard"":""-"",""analytics_id"":""-""}],""folder"":{""id"":""4000000062001""},""timespan"":{""offsetleft"":""-"",""offsetright"":""-"",""type"":""Task"",""from"":""-"",""to"":""-""},""additional_info"":{""cumulative"":""-"",""kpi_settings"":{""kpi_symbol_direction"":""-"",""kpi_numeric_symbol"":""-"",""kpi_precision_type"":""-"",""kpi_precision"":""-"",""kpi_widget_position_type"":""-""}},""widget_configuration"":[{""x"":""-"",""y"":""-"",""h"":""-"",""w"":""-""}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}]}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"-\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":[{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"-","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":[{"x":"-","y":"-","h":"-","w":"-"}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "chart_type" : "-", "chart_configuration" : [ { "report_field" : "-", "aggregate_function" : "-", "group_by" : "-", "embed_url" : "-", "kpi_widget_position_type" : "-", "is_dashboard" : "-", "analytics_id" : "-" } ], "folder" : { "id" : "4000000062001" }, "timespan" : { "offsetleft" : "-", "offsetright" : "-", "type" : "Task", "from" : "-", "to" : "-" }, "additional_info" : { "cumulative" : "-", "kpi_settings" : { "kpi_symbol_direction" : "-", "kpi_numeric_symbol" : "-", "kpi_precision_type" : "-", "kpi_precision" : "-", "kpi_widget_position_type" : "-" } }, "widget_configuration" : [ { "x" : "-", "y" : "-", "h" : "-", "w" : "-" } ] }

        Sample Response

        200{ "id" : "5000000017001", "name" : "Widget 02", "folder" : { "id" : "5000000009011" }, "chart_type" : "clustered", "sequence" : "1", "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "created_time" : "2025-11-06T10:00:13.742Z", "updated_time" : "2025-11-06T12:58:04.952Z", "chart_configuration" : [ { "group_by" : [ "percentage", "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "widget_configuration" : { "x" : "14", "y" : "0", "w" : "14", "h" : "10" }, "module" : { "id" : "5000000000146", "name" : "Task" }, "report_type" : "customreport" }
        Clone Widget

        Clone Widget

        POST

        /api/v3/portal/[PORTALID]/widgets/[WIDGETID]/clone

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone";
        response = invokeUrl
        [
            url: url
            type: POST
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/widgets/[WIDGETID]/clone");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone" -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]/clone")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        201{ "id" : "5000000019033", "name" : "Status", "folder" : { "id" : "5000000009011" }, "chart_type" : "hbar", "sequence" : "4", "is_default" : false, "created_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "updated_by" : { "zuid" : "43499539", "zpuid" : "5000000002641", "name" : "Ryan", "first_name" : "Ryan", "last_name" : "Mitchell", "email" : "ryan.mitchell@zylker.com", "full_name" : "Ryan Mitchell" }, "created_time" : "2025-11-05T13:14:11.909Z", "updated_time" : "2025-11-05T13:14:11.909Z", "chart_configuration" : [ { "group_by" : [ "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "widget_configuration" : { "w" : "14", "h" : "10" }, "module" : { "id" : "5000000000146", "name" : "Task" }, "report_type" : "customreport" }
        Delete Widget

        To delete Widget

        DELETE

        /api/v3/portal/[PORTALID]/widgets/[WIDGETID]

        OAuth Scope:

        ZohoProjects.portals.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/widgets/[WIDGETID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/widgets/[WIDGETID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Reports

        This module covers operations related to reports within Zoho Projects. Use this API to generate, export, and retrieve task and project reports, including bug and task report histories.

        Get Workload Report Meta Details

        Retrieve workload report meta details from the Zoho projects portal.

        GET

        /api/v3/portal/[PORTALID]/reports/workload/meta

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        project_id

        long

        Enter the project ID (Not required for global reports).

        from_date

        String

        Enter the chart start date.

        to_date

        String

        Enter the chart end date.

        time_period

        String

        required

        Enter the view period.
        Accepted values: days,weeks,months

        group_by

        String

        required

        Enter the group by value.
        Accepted values: users,task_list,teams,profiles,roles

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta?project_id=23806000097545166&from_date=2025-05-01T00%3A00%3A00.000Z&to_date=2025-05-31T23%3A59%3A59.999Z&time_period=days&group_by=users' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta";
        params = Map();
        params.put("project_id", "23806000097545166");
        params.put("from_date", "2025-05-01T00:00:00.000Z");
        params.put("to_date", "2025-05-31T23:59:59.999Z");
        params.put("time_period", "days");
        params.put("group_by", "users");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta');
        url.searchParams.append('project_id', '23806000097545166');
        url.searchParams.append('from_date', '2025-05-01T00:00:00.000Z');
        url.searchParams.append('to_date', '2025-05-31T23:59:59.999Z');
        url.searchParams.append('time_period', 'days');
        url.searchParams.append('group_by', 'users');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta")
        params = {
          "project_id" => "23806000097545166",
          "from_date" => "2025-05-01T00:00:00.000Z",
          "to_date" => "2025-05-31T23:59:59.999Z",
          "time_period" => "days",
          "group_by" => "users"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'project_id' => '23806000097545166',
            'from_date' => '2025-05-01T00:00:00.000Z',
            'to_date' => '2025-05-31T23:59:59.999Z',
            'time_period' => 'days',
            'group_by' => 'users',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta"
        
        params = {
            "project_id": "23806000097545166",
            "from_date": "2025-05-01T00:00:00.000Z",
            "to_date": "2025-05-31T23:59:59.999Z",
            "time_period": "days",
            "group_by": "users"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char *enc_from_date = curl_easy_escape(curl, "2025-05-01T00:00:00.000Z", 0);
                char *enc_to_date = curl_easy_escape(curl, "2025-05-31T23:59:59.999Z", 0);
                char *enc_time_period = curl_easy_escape(curl, "days", 0);
                char *enc_group_by = curl_easy_escape(curl, "users", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta?project_id=%s&from_date=%s&to_date=%s&time_period=%s&group_by=%s", enc_project_id, enc_from_date, enc_to_date, enc_time_period, enc_group_by);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_project_id);
                curl_free(enc_from_date);
                curl_free(enc_to_date);
                curl_free(enc_time_period);
                curl_free(enc_group_by);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["project_id"] = "23806000097545166";
        query["from_date"] = "2025-05-01T00:00:00.000Z";
        query["to_date"] = "2025-05-31T23:59:59.999Z";
        query["time_period"] = "days";
        query["group_by"] = "users";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char* enc_from_date = curl_easy_escape(curl, "2025-05-01T00:00:00.000Z", 0);
                char* enc_to_date = curl_easy_escape(curl, "2025-05-31T23:59:59.999Z", 0);
                char* enc_time_period = curl_easy_escape(curl, "days", 0);
                char* enc_group_by = curl_easy_escape(curl, "users", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta";
                url += "?project_id=" + std::string(enc_project_id);
                url += "&from_date=" + std::string(enc_from_date);
                url += "&to_date=" + std::string(enc_to_date);
                url += "&time_period=" + std::string(enc_time_period);
                url += "&group_by=" + std::string(enc_group_by);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_project_id);
                curl_free(enc_from_date);
                curl_free(enc_to_date);
                curl_free(enc_time_period);
                curl_free(enc_group_by);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
              enc-from_date (java.net.URLEncoder/encode "2025-05-01T00:00:00.000Z" "UTF-8")
              enc-to_date (java.net.URLEncoder/encode "2025-05-31T23:59:59.999Z" "UTF-8")
              enc-time_period (java.net.URLEncoder/encode "days" "UTF-8")
              enc-group_by (java.net.URLEncoder/encode "users" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta" "?project_id=" enc-project_id "&from_date=" enc-from_date "&to_date=" enc-to_date "&time_period=" enc-time_period "&group_by=" enc-group_by)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta", nil)
            q := req.URL.Query()
            q.Add("project_id", "23806000097545166")
            q.Add("from_date", "2025-05-01T00:00:00.000Z")
            q.Add("to_date", "2025-05-31T23:59:59.999Z")
            q.Add("time_period", "days")
            q.Add("group_by", "users")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta?project_id=23806000097545166&from_date=2025-05-01T00%3A00%3A00.000Z&to_date=2025-05-31T23%3A59%3A59.999Z&time_period=days&group_by=users HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/reports/workload/meta");
        uriBuilder.addParameter("project_id", "23806000097545166");
        uriBuilder.addParameter("from_date", "2025-05-01T00:00:00.000Z");
        uriBuilder.addParameter("to_date", "2025-05-31T23:59:59.999Z");
        uriBuilder.addParameter("time_period", "days");
        uriBuilder.addParameter("group_by", "users");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta';
        
        const params = new URLSearchParams({
          'project_id': '23806000097545166',
          'from_date': '2025-05-01T00:00:00.000Z',
          'to_date': '2025-05-31T23:59:59.999Z',
          'time_period': 'days',
          'group_by': 'users'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        project_id = "23806000097545166"
        from_date = "2025-05-01T00:00:00.000Z"
        to_date = "2025-05-31T23:59:59.999Z"
        time_period = "days"
        group_by = "users"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("project_id", "23806000097545166")
            urlBuilder.addQueryParameter("from_date", "2025-05-01T00:00:00.000Z")
            urlBuilder.addQueryParameter("to_date", "2025-05-31T23:59:59.999Z")
            urlBuilder.addQueryParameter("time_period", "days")
            urlBuilder.addQueryParameter("group_by", "users")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedFrom_date = [@"2025-05-01T00:00:00.000Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedTo_date = [@"2025-05-31T23:59:59.999Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedTime_period = [@"days" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedGroup_by = [@"users" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta?project_id=%@&from_date=%@&to_date=%@&time_period=%@&group_by=%@", encodedProject_id, encodedFrom_date, encodedTo_date, encodedTime_period, encodedGroup_by];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_project_id = Uri.pct_encode "23806000097545166" in
          let enc_from_date = Uri.pct_encode "2025-05-01T00:00:00.000Z" in
          let enc_to_date = Uri.pct_encode "2025-05-31T23:59:59.999Z" in
          let enc_time_period = Uri.pct_encode "days" in
          let enc_group_by = Uri.pct_encode "users" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta" ^ "?project_id=" ^ enc_project_id ^ "&from_date=" ^ enc_from_date ^ "&to_date=" ^ enc_to_date ^ "&time_period=" ^ enc_time_period ^ "&group_by=" ^ enc_group_by) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            project_id = "23806000097545166"
            from_date = "2025-05-01T00:00:00.000Z"
            to_date = "2025-05-31T23:59:59.999Z"
            time_period = "days"
            group_by = "users"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta"
        
        params <- list(
          project_id = "23806000097545166",
          from_date = "2025-05-01T00:00:00.000Z",
          to_date = "2025-05-31T23:59:59.999Z",
          time_period = "days",
          group_by = "users"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/meta")!
        components.queryItems = [
            URLQueryItem(name: "project_id", value: "23806000097545166"),
            URLQueryItem(name: "from_date", value: "2025-05-01T00:00:00.000Z"),
            URLQueryItem(name: "to_date", value: "2025-05-31T23:59:59.999Z"),
            URLQueryItem(name: "time_period", value: "days"),
            URLQueryItem(name: "group_by", value: "users")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        project_id : "23806000097545166" from_date : "2025-05-01T00:00:00.000Z" to_date : "2025-05-31T23:59:59.999Z" time_period : "days" group_by : "users"

        Sample Response

        200{ "group_by_field_details" : { "group_by_fields" : [ { "display_name" : "zp.gantt.taskowner", "selected" : true, "field_name" : "users" } ], "group_by_custom_fields" : "[]", "group_by" : "users" }, "project_id" : "0", "user_range" : "15", "user_premission_details" : { "assign_to_self" : "false", "assign_to_others" : "false" }, "task_title" : "true", "project_title" : "true", "chart_details" : { "end_date" : "20240930", "previous_date" : "20240801", "unit" : "hours", "legend" : "allocatedhrs", "to_view" : "days", "empty_message" : "No data found", "range" : "days", "view_type" : "bar", "bar_type" : "gantt", "start_date" : "20240901", "next_date" : "20241001" } }
        Get Workload Report Details

        Retrieve workload report details from the Zoho projects portal.

        GET

        /api/v3/portal/[PORTALID]/reports/workload

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        project_id

        long

        Enter the project ID (Not required for global reports).

        from_date

        String

        Enter the chart start date.

        to_date

        String

        Enter the chart end date.

        group_by

        String

        required

        Enter the group by value.
        Accepted values: users,task_list,teams,profiles,roles

        index

        int

        Enter the index of the record.

        range

        int

        Enter the range of the record.

        filter

        String

        Enter the filter criteria.

        fetch_unassignee

        boolean

        Specify whether to fetch the details of unassigned user only.
        Accepted values: true or false

        search_term

        String

        max length : 50

        Enter the search term.

        grouped_ids

        JSONArray

        max length : 2000
        array size : 1-20

        Enter the entity IDs.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload?project_id=23806000097545166&from_date=2025-05-01T00%3A00%3A00.000Z&to_date=2025-05-31T23%3A59%3A59.999Z&group_by=users&index=1&range=15&filter=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2232%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22Network%22%5D%7D%5D%2C%22pattern%22%3A%221%22%2C%22is_saved%22%3Afalse%2C%22isclearfilter%22%3Atrue%7D&fetch_unassignee=false&search_term=Zoho+Projects&grouped_ids=%5B%224000000002379%22%5D' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload";
        params = Map();
        params.put("project_id", "23806000097545166");
        params.put("from_date", "2025-05-01T00:00:00.000Z");
        params.put("to_date", "2025-05-31T23:59:59.999Z");
        params.put("group_by", "users");
        params.put("index", "1");
        params.put("range", 15);
        params.put("filter", {"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true});
        params.put("fetch_unassignee", false);
        params.put("search_term", "Zoho Projects");
        params.put("grouped_ids", ["4000000002379"]);
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload');
        url.searchParams.append('project_id', '23806000097545166');
        url.searchParams.append('from_date', '2025-05-01T00:00:00.000Z');
        url.searchParams.append('to_date', '2025-05-31T23:59:59.999Z');
        url.searchParams.append('group_by', 'users');
        url.searchParams.append('index', '1');
        url.searchParams.append('range', '15');
        url.searchParams.append('filter', '{"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}');
        url.searchParams.append('fetch_unassignee', 'false');
        url.searchParams.append('search_term', 'Zoho Projects');
        url.searchParams.append('grouped_ids', '["4000000002379"]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload")
        params = {
          "project_id" => "23806000097545166",
          "from_date" => "2025-05-01T00:00:00.000Z",
          "to_date" => "2025-05-31T23:59:59.999Z",
          "group_by" => "users",
          "index" => "1",
          "range" => "15",
          "filter" => "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}",
          "fetch_unassignee" => "false",
          "search_term" => "Zoho Projects",
          "grouped_ids" => "[\"4000000002379\"]"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'project_id' => '23806000097545166',
            'from_date' => '2025-05-01T00:00:00.000Z',
            'to_date' => '2025-05-31T23:59:59.999Z',
            'group_by' => 'users',
            'index' => '1',
            'range' => '15',
            'filter' => '{"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}',
            'fetch_unassignee' => 'false',
            'search_term' => 'Zoho Projects',
            'grouped_ids' => '["4000000002379"]',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload"
        
        params = {
            "project_id": "23806000097545166",
            "from_date": "2025-05-01T00:00:00.000Z",
            "to_date": "2025-05-31T23:59:59.999Z",
            "group_by": "users",
            "index": "1",
            "range": "15",
            "filter": "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}",
            "fetch_unassignee": "false",
            "search_term": "Zoho Projects",
            "grouped_ids": "[\"4000000002379\"]"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char *enc_from_date = curl_easy_escape(curl, "2025-05-01T00:00:00.000Z", 0);
                char *enc_to_date = curl_easy_escape(curl, "2025-05-31T23:59:59.999Z", 0);
                char *enc_group_by = curl_easy_escape(curl, "users", 0);
                char *enc_index = curl_easy_escape(curl, "1", 0);
                char *enc_range = curl_easy_escape(curl, "15", 0);
                char *enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}", 0);
                char *enc_fetch_unassignee = curl_easy_escape(curl, "false", 0);
                char *enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
                char *enc_grouped_ids = curl_easy_escape(curl, "[\"4000000002379\"]", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload?project_id=%s&from_date=%s&to_date=%s&group_by=%s&index=%s&range=%s&filter=%s&fetch_unassignee=%s&search_term=%s&grouped_ids=%s", enc_project_id, enc_from_date, enc_to_date, enc_group_by, enc_index, enc_range, enc_filter, enc_fetch_unassignee, enc_search_term, enc_grouped_ids);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_project_id);
                curl_free(enc_from_date);
                curl_free(enc_to_date);
                curl_free(enc_group_by);
                curl_free(enc_index);
                curl_free(enc_range);
                curl_free(enc_filter);
                curl_free(enc_fetch_unassignee);
                curl_free(enc_search_term);
                curl_free(enc_grouped_ids);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["project_id"] = "23806000097545166";
        query["from_date"] = "2025-05-01T00:00:00.000Z";
        query["to_date"] = "2025-05-31T23:59:59.999Z";
        query["group_by"] = "users";
        query["index"] = "1";
        query["range"] = "15";
        query["filter"] = "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}";
        query["fetch_unassignee"] = "false";
        query["search_term"] = "Zoho Projects";
        query["grouped_ids"] = "[\"4000000002379\"]";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char* enc_from_date = curl_easy_escape(curl, "2025-05-01T00:00:00.000Z", 0);
                char* enc_to_date = curl_easy_escape(curl, "2025-05-31T23:59:59.999Z", 0);
                char* enc_group_by = curl_easy_escape(curl, "users", 0);
                char* enc_index = curl_easy_escape(curl, "1", 0);
                char* enc_range = curl_easy_escape(curl, "15", 0);
                char* enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}", 0);
                char* enc_fetch_unassignee = curl_easy_escape(curl, "false", 0);
                char* enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
                char* enc_grouped_ids = curl_easy_escape(curl, "[\"4000000002379\"]", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload";
                url += "?project_id=" + std::string(enc_project_id);
                url += "&from_date=" + std::string(enc_from_date);
                url += "&to_date=" + std::string(enc_to_date);
                url += "&group_by=" + std::string(enc_group_by);
                url += "&index=" + std::string(enc_index);
                url += "&range=" + std::string(enc_range);
                url += "&filter=" + std::string(enc_filter);
                url += "&fetch_unassignee=" + std::string(enc_fetch_unassignee);
                url += "&search_term=" + std::string(enc_search_term);
                url += "&grouped_ids=" + std::string(enc_grouped_ids);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_project_id);
                curl_free(enc_from_date);
                curl_free(enc_to_date);
                curl_free(enc_group_by);
                curl_free(enc_index);
                curl_free(enc_range);
                curl_free(enc_filter);
                curl_free(enc_fetch_unassignee);
                curl_free(enc_search_term);
                curl_free(enc_grouped_ids);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
              enc-from_date (java.net.URLEncoder/encode "2025-05-01T00:00:00.000Z" "UTF-8")
              enc-to_date (java.net.URLEncoder/encode "2025-05-31T23:59:59.999Z" "UTF-8")
              enc-group_by (java.net.URLEncoder/encode "users" "UTF-8")
              enc-index (java.net.URLEncoder/encode "1" "UTF-8")
              enc-range (java.net.URLEncoder/encode "15" "UTF-8")
              enc-filter (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}" "UTF-8")
              enc-fetch_unassignee (java.net.URLEncoder/encode "false" "UTF-8")
              enc-search_term (java.net.URLEncoder/encode "Zoho Projects" "UTF-8")
              enc-grouped_ids (java.net.URLEncoder/encode "[\"4000000002379\"]" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload" "?project_id=" enc-project_id "&from_date=" enc-from_date "&to_date=" enc-to_date "&group_by=" enc-group_by "&index=" enc-index "&range=" enc-range "&filter=" enc-filter "&fetch_unassignee=" enc-fetch_unassignee "&search_term=" enc-search_term "&grouped_ids=" enc-grouped_ids)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload", nil)
            q := req.URL.Query()
            q.Add("project_id", "23806000097545166")
            q.Add("from_date", "2025-05-01T00:00:00.000Z")
            q.Add("to_date", "2025-05-31T23:59:59.999Z")
            q.Add("group_by", "users")
            q.Add("index", "1")
            q.Add("range", "15")
            q.Add("filter", "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}")
            q.Add("fetch_unassignee", "false")
            q.Add("search_term", "Zoho Projects")
            q.Add("grouped_ids", "[\"4000000002379\"]")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload?project_id=23806000097545166&from_date=2025-05-01T00%3A00%3A00.000Z&to_date=2025-05-31T23%3A59%3A59.999Z&group_by=users&index=1&range=15&filter=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2232%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22Network%22%5D%7D%5D%2C%22pattern%22%3A%221%22%2C%22is_saved%22%3Afalse%2C%22isclearfilter%22%3Atrue%7D&fetch_unassignee=false&search_term=Zoho+Projects&grouped_ids=%5B%224000000002379%22%5D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/reports/workload");
        uriBuilder.addParameter("project_id", "23806000097545166");
        uriBuilder.addParameter("from_date", "2025-05-01T00:00:00.000Z");
        uriBuilder.addParameter("to_date", "2025-05-31T23:59:59.999Z");
        uriBuilder.addParameter("group_by", "users");
        uriBuilder.addParameter("index", "1");
        uriBuilder.addParameter("range", "15");
        uriBuilder.addParameter("filter", "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}");
        uriBuilder.addParameter("fetch_unassignee", "false");
        uriBuilder.addParameter("search_term", "Zoho Projects");
        uriBuilder.addParameter("grouped_ids", "[\"4000000002379\"]");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload';
        
        const params = new URLSearchParams({
          'project_id': '23806000097545166',
          'from_date': '2025-05-01T00:00:00.000Z',
          'to_date': '2025-05-31T23:59:59.999Z',
          'group_by': 'users',
          'index': '1',
          'range': '15',
          'filter': '{"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}',
          'fetch_unassignee': 'false',
          'search_term': 'Zoho Projects',
          'grouped_ids': '["4000000002379"]'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        project_id = "23806000097545166"
        from_date = "2025-05-01T00:00:00.000Z"
        to_date = "2025-05-31T23:59:59.999Z"
        group_by = "users"
        index = "1"
        range = 15
        filter = {"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}
        fetch_unassignee = false
        search_term = "Zoho Projects"
        grouped_ids = ["4000000002379"]
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("project_id", "23806000097545166")
            urlBuilder.addQueryParameter("from_date", "2025-05-01T00:00:00.000Z")
            urlBuilder.addQueryParameter("to_date", "2025-05-31T23:59:59.999Z")
            urlBuilder.addQueryParameter("group_by", "users")
            urlBuilder.addQueryParameter("index", "1")
            urlBuilder.addQueryParameter("range", "15")
            urlBuilder.addQueryParameter("filter", "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}")
            urlBuilder.addQueryParameter("fetch_unassignee", "false")
            urlBuilder.addQueryParameter("search_term", "Zoho Projects")
            urlBuilder.addQueryParameter("grouped_ids", "[\"4000000002379\"]")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedFrom_date = [@"2025-05-01T00:00:00.000Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedTo_date = [@"2025-05-31T23:59:59.999Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedGroup_by = [@"users" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedIndex = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedRange = [@"15" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedFilter = [@"{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedFetch_unassignee = [@"false" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSearch_term = [@"Zoho Projects" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedGrouped_ids = [@"[\"4000000002379\"]" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload?project_id=%@&from_date=%@&to_date=%@&group_by=%@&index=%@&range=%@&filter=%@&fetch_unassignee=%@&search_term=%@&grouped_ids=%@", encodedProject_id, encodedFrom_date, encodedTo_date, encodedGroup_by, encodedIndex, encodedRange, encodedFilter, encodedFetch_unassignee, encodedSearch_term, encodedGrouped_ids];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_project_id = Uri.pct_encode "23806000097545166" in
          let enc_from_date = Uri.pct_encode "2025-05-01T00:00:00.000Z" in
          let enc_to_date = Uri.pct_encode "2025-05-31T23:59:59.999Z" in
          let enc_group_by = Uri.pct_encode "users" in
          let enc_index = Uri.pct_encode "1" in
          let enc_range = Uri.pct_encode "15" in
          let enc_filter = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}" in
          let enc_fetch_unassignee = Uri.pct_encode "false" in
          let enc_search_term = Uri.pct_encode "Zoho Projects" in
          let enc_grouped_ids = Uri.pct_encode "[\"4000000002379\"]" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload" ^ "?project_id=" ^ enc_project_id ^ "&from_date=" ^ enc_from_date ^ "&to_date=" ^ enc_to_date ^ "&group_by=" ^ enc_group_by ^ "&index=" ^ enc_index ^ "&range=" ^ enc_range ^ "&filter=" ^ enc_filter ^ "&fetch_unassignee=" ^ enc_fetch_unassignee ^ "&search_term=" ^ enc_search_term ^ "&grouped_ids=" ^ enc_grouped_ids) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            project_id = "23806000097545166"
            from_date = "2025-05-01T00:00:00.000Z"
            to_date = "2025-05-31T23:59:59.999Z"
            group_by = "users"
            index = "1"
            range = "15"
            filter = "{`"criteria`":[{`"cfid`":`"32`",`"criteria_condition`":`"contains`",`"value`":[`"Network`"]}],`"pattern`":`"1`",`"is_saved`":false,`"isclearfilter`":true}"
            fetch_unassignee = "false"
            search_term = "Zoho Projects"
            grouped_ids = "[`"4000000002379`"]"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload"
        
        params <- list(
          project_id = "23806000097545166",
          from_date = "2025-05-01T00:00:00.000Z",
          to_date = "2025-05-31T23:59:59.999Z",
          group_by = "users",
          index = "1",
          range = "15",
          filter = "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}",
          fetch_unassignee = "false",
          search_term = "Zoho Projects",
          grouped_ids = "[\"4000000002379\"]"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload")!
        components.queryItems = [
            URLQueryItem(name: "project_id", value: "23806000097545166"),
            URLQueryItem(name: "from_date", value: "2025-05-01T00:00:00.000Z"),
            URLQueryItem(name: "to_date", value: "2025-05-31T23:59:59.999Z"),
            URLQueryItem(name: "group_by", value: "users"),
            URLQueryItem(name: "index", value: "1"),
            URLQueryItem(name: "range", value: "15"),
            URLQueryItem(name: "filter", value: "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}"),
            URLQueryItem(name: "fetch_unassignee", value: "false"),
            URLQueryItem(name: "search_term", value: "Zoho Projects"),
            URLQueryItem(name: "grouped_ids", value: "[\"4000000002379\"]")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        project_id : "23806000097545166" from_date : "2025-05-01T00:00:00.000Z" to_date : "2025-05-31T23:59:59.999Z" group_by : "users" index : "1" range : 15 filter : {"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true} fetch_unassignee : false search_term : "Zoho Projects" grouped_ids : ["4000000002379"]

        Sample Response

        200{ "business_hours" : { "default_id" : "4000000021000", "details" : [ { "holidays" : "[{\"holiday_date\":\"2024-01-01\"},{\"holiday_date\":\"2024-01-15\"}]", "working_day_availability" : { "1" : 753, "2" : 685, "3" : 525, "4" : 525, "5" : 692 }, "id" : "4000000035005" } ] }, "page_info" : { "index" : "1", "range" : "15", "has_next" : "true" }, "owners" : [ { "secondary_id" : "22823316", "work" : { "overall_allocation" : "over", "total_availability" : 10920, "total_work" : 41280, "total_date_work" : [ { "date" : "20240930", "allocation" : "over", "work" : 1080 }, { "date" : "20240927", "allocation" : "over", "work" : 2160 }, { "date" : "20240926", "allocation" : "over", "work" : 2040 }, { "date" : "20240925", "allocation" : "over", "work" : 2040 }, { "date" : "20240924", "allocation" : "over", "work" : 2040 }, { "date" : "20240923", "allocation" : "over", "work" : 2040 }, { "date" : "20240920", "allocation" : "over", "work" : 2160 }, { "date" : "20240919", "allocation" : "over", "work" : 2040 }, { "date" : "20240918", "allocation" : "over", "work" : 2040 }, { "date" : "20240917", "allocation" : "over", "work" : 2040 }, { "date" : "20240916", "allocation" : "over", "work" : 2040 }, { "date" : "20240913", "allocation" : "over", "work" : 2160 }, { "date" : "20240912", "allocation" : "over", "work" : 2040 }, { "date" : "20240911", "allocation" : "over", "work" : 2040 }, { "date" : "20240910", "allocation" : "over", "work" : 2040 }, { "date" : "20240909", "allocation" : "over", "work" : 2040 }, { "date" : "20240906", "allocation" : "over", "work" : 2160 }, { "date" : "20240905", "allocation" : "over", "work" : 2040 }, { "date" : "20240904", "allocation" : "over", "work" : 2040 }, { "date" : "20240903", "allocation" : "over", "work" : 2040 }, { "date" : "20240902", "allocation" : "over", "work" : 960 } ], "project_date_work" : [ { "total_work" : 41280, "id" : "4000000042015", "date_work" : [ { "date" : "20240930", "allocation" : "over", "work" : 1080 }, { "date" : "20240927", "allocation" : "over", "work" : 2160 }, { "date" : "20240926", "allocation" : "over", "work" : 2040 }, { "date" : "20240925", "allocation" : "over", "work" : 2040 }, { "date" : "20240924", "allocation" : "over", "work" : 2040 }, { "date" : "20240923", "allocation" : "over", "work" : 2040 }, { "date" : "20240920", "allocation" : "over", "work" : 2160 }, { "date" : "20240919", "allocation" : "over", "work" : 2040 }, { "date" : "20240918", "allocation" : "over", "work" : 2040 }, { "date" : "20240917", "allocation" : "over", "work" : 2040 }, { "date" : "20240916", "allocation" : "over", "work" : 2040 }, { "date" : "20240913", "allocation" : "over", "work" : 2160 }, { "date" : "20240912", "allocation" : "over", "work" : 2040 }, { "date" : "20240911", "allocation" : "over", "work" : 2040 }, { "date" : "20240910", "allocation" : "over", "work" : 2040 }, { "date" : "20240909", "allocation" : "over", "work" : 2040 }, { "date" : "20240906", "allocation" : "over", "work" : 2160 }, { "date" : "20240905", "allocation" : "over", "work" : 2040 }, { "date" : "20240904", "allocation" : "over", "work" : 2040 }, { "date" : "20240903", "allocation" : "over", "work" : 2040 }, { "date" : "20240902", "allocation" : "over", "work" : 960 } ] } ] }, "business_hours_id" : "4000000021000", "name" : "Nathan Brooks", "count" : { "users_count" : 1, "entity_count" : 3, "project_entity_count" : { "4000000042015" : 3 }, "recurring_entity_count" : 19 }, "id" : "4000000002379", "is_resource" : false } ], "group_by_selection" : "zp.gantt.taskowner" }
        Get Allocated Work Details

        Retrieve allocated work details of an existing user or resource from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/reports/workload/owner/[OWNERID]/details

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        project_id

        long

        Enter the project ID (Not required for global reports).

        from_date

        String

        Enter the chart start date.

        to_date

        String

        Enter the chart end date.

        group_by

        String

        required

        Enter the group by value.
        Accepted values: users,task_list,teams,profiles,roles

        filter

        String

        Enter the filter criteria.

        next_token

        String

        Enter the token to fetch the next set of entity details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details?project_id=23806000097545166&from_date=2025-05-01T00%3A00%3A00.000Z&to_date=2025-05-31T23%3A59%3A59.999Z&group_by=users&filter=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2232%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22Network%22%5D%7D%5D%2C%22pattern%22%3A%221%22%2C%22is_saved%22%3Afalse%2C%22isclearfilter%22%3Atrue%7D&next_token=projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details";
        params = Map();
        params.put("project_id", "23806000097545166");
        params.put("from_date", "2025-05-01T00:00:00.000Z");
        params.put("to_date", "2025-05-31T23:59:59.999Z");
        params.put("group_by", "users");
        params.put("filter", {"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true});
        params.put("next_token", "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details');
        url.searchParams.append('project_id', '23806000097545166');
        url.searchParams.append('from_date', '2025-05-01T00:00:00.000Z');
        url.searchParams.append('to_date', '2025-05-31T23:59:59.999Z');
        url.searchParams.append('group_by', 'users');
        url.searchParams.append('filter', '{"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}');
        url.searchParams.append('next_token', 'projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details")
        params = {
          "project_id" => "23806000097545166",
          "from_date" => "2025-05-01T00:00:00.000Z",
          "to_date" => "2025-05-31T23:59:59.999Z",
          "group_by" => "users",
          "filter" => "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}",
          "next_token" => "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'project_id' => '23806000097545166',
            'from_date' => '2025-05-01T00:00:00.000Z',
            'to_date' => '2025-05-31T23:59:59.999Z',
            'group_by' => 'users',
            'filter' => '{"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}',
            'next_token' => 'projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details"
        
        params = {
            "project_id": "23806000097545166",
            "from_date": "2025-05-01T00:00:00.000Z",
            "to_date": "2025-05-31T23:59:59.999Z",
            "group_by": "users",
            "filter": "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}",
            "next_token": "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char *enc_from_date = curl_easy_escape(curl, "2025-05-01T00:00:00.000Z", 0);
                char *enc_to_date = curl_easy_escape(curl, "2025-05-31T23:59:59.999Z", 0);
                char *enc_group_by = curl_easy_escape(curl, "users", 0);
                char *enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}", 0);
                char *enc_next_token = curl_easy_escape(curl, "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details?project_id=%s&from_date=%s&to_date=%s&group_by=%s&filter=%s&next_token=%s", enc_project_id, enc_from_date, enc_to_date, enc_group_by, enc_filter, enc_next_token);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_project_id);
                curl_free(enc_from_date);
                curl_free(enc_to_date);
                curl_free(enc_group_by);
                curl_free(enc_filter);
                curl_free(enc_next_token);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["project_id"] = "23806000097545166";
        query["from_date"] = "2025-05-01T00:00:00.000Z";
        query["to_date"] = "2025-05-31T23:59:59.999Z";
        query["group_by"] = "users";
        query["filter"] = "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}";
        query["next_token"] = "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_project_id = curl_easy_escape(curl, "23806000097545166", 0);
                char* enc_from_date = curl_easy_escape(curl, "2025-05-01T00:00:00.000Z", 0);
                char* enc_to_date = curl_easy_escape(curl, "2025-05-31T23:59:59.999Z", 0);
                char* enc_group_by = curl_easy_escape(curl, "users", 0);
                char* enc_filter = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}", 0);
                char* enc_next_token = curl_easy_escape(curl, "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details";
                url += "?project_id=" + std::string(enc_project_id);
                url += "&from_date=" + std::string(enc_from_date);
                url += "&to_date=" + std::string(enc_to_date);
                url += "&group_by=" + std::string(enc_group_by);
                url += "&filter=" + std::string(enc_filter);
                url += "&next_token=" + std::string(enc_next_token);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_project_id);
                curl_free(enc_from_date);
                curl_free(enc_to_date);
                curl_free(enc_group_by);
                curl_free(enc_filter);
                curl_free(enc_next_token);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-project_id (java.net.URLEncoder/encode "23806000097545166" "UTF-8")
              enc-from_date (java.net.URLEncoder/encode "2025-05-01T00:00:00.000Z" "UTF-8")
              enc-to_date (java.net.URLEncoder/encode "2025-05-31T23:59:59.999Z" "UTF-8")
              enc-group_by (java.net.URLEncoder/encode "users" "UTF-8")
              enc-filter (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}" "UTF-8")
              enc-next_token (java.net.URLEncoder/encode "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details" "?project_id=" enc-project_id "&from_date=" enc-from_date "&to_date=" enc-to_date "&group_by=" enc-group_by "&filter=" enc-filter "&next_token=" enc-next_token)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details", nil)
            q := req.URL.Query()
            q.Add("project_id", "23806000097545166")
            q.Add("from_date", "2025-05-01T00:00:00.000Z")
            q.Add("to_date", "2025-05-31T23:59:59.999Z")
            q.Add("group_by", "users")
            q.Add("filter", "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}")
            q.Add("next_token", "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details?project_id=23806000097545166&from_date=2025-05-01T00%3A00%3A00.000Z&to_date=2025-05-31T23%3A59%3A59.999Z&group_by=users&filter=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%2232%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%22Network%22%5D%7D%5D%2C%22pattern%22%3A%221%22%2C%22is_saved%22%3Afalse%2C%22isclearfilter%22%3Atrue%7D&next_token=projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/reports/workload/owner/[OWNERID]/details");
        uriBuilder.addParameter("project_id", "23806000097545166");
        uriBuilder.addParameter("from_date", "2025-05-01T00:00:00.000Z");
        uriBuilder.addParameter("to_date", "2025-05-31T23:59:59.999Z");
        uriBuilder.addParameter("group_by", "users");
        uriBuilder.addParameter("filter", "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}");
        uriBuilder.addParameter("next_token", "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details';
        
        const params = new URLSearchParams({
          'project_id': '23806000097545166',
          'from_date': '2025-05-01T00:00:00.000Z',
          'to_date': '2025-05-31T23:59:59.999Z',
          'group_by': 'users',
          'filter': '{"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}',
          'next_token': 'projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        project_id = "23806000097545166"
        from_date = "2025-05-01T00:00:00.000Z"
        to_date = "2025-05-31T23:59:59.999Z"
        group_by = "users"
        filter = {"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true}
        next_token = "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637"
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("project_id", "23806000097545166")
            urlBuilder.addQueryParameter("from_date", "2025-05-01T00:00:00.000Z")
            urlBuilder.addQueryParameter("to_date", "2025-05-31T23:59:59.999Z")
            urlBuilder.addQueryParameter("group_by", "users")
            urlBuilder.addQueryParameter("filter", "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}")
            urlBuilder.addQueryParameter("next_token", "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedProject_id = [@"23806000097545166" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedFrom_date = [@"2025-05-01T00:00:00.000Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedTo_date = [@"2025-05-31T23:59:59.999Z" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedGroup_by = [@"users" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedFilter = [@"{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedNext_token = [@"projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details?project_id=%@&from_date=%@&to_date=%@&group_by=%@&filter=%@&next_token=%@", encodedProject_id, encodedFrom_date, encodedTo_date, encodedGroup_by, encodedFilter, encodedNext_token];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_project_id = Uri.pct_encode "23806000097545166" in
          let enc_from_date = Uri.pct_encode "2025-05-01T00:00:00.000Z" in
          let enc_to_date = Uri.pct_encode "2025-05-31T23:59:59.999Z" in
          let enc_group_by = Uri.pct_encode "users" in
          let enc_filter = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}" in
          let enc_next_token = Uri.pct_encode "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details" ^ "?project_id=" ^ enc_project_id ^ "&from_date=" ^ enc_from_date ^ "&to_date=" ^ enc_to_date ^ "&group_by=" ^ enc_group_by ^ "&filter=" ^ enc_filter ^ "&next_token=" ^ enc_next_token) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            project_id = "23806000097545166"
            from_date = "2025-05-01T00:00:00.000Z"
            to_date = "2025-05-31T23:59:59.999Z"
            group_by = "users"
            filter = "{`"criteria`":[{`"cfid`":`"32`",`"criteria_condition`":`"contains`",`"value`":[`"Network`"]}],`"pattern`":`"1`",`"is_saved`":false,`"isclearfilter`":true}"
            next_token = "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details"
        
        params <- list(
          project_id = "23806000097545166",
          from_date = "2025-05-01T00:00:00.000Z",
          to_date = "2025-05-31T23:59:59.999Z",
          group_by = "users",
          filter = "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}",
          next_token = "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/workload/owner/[OWNERID]/details")!
        components.queryItems = [
            URLQueryItem(name: "project_id", value: "23806000097545166"),
            URLQueryItem(name: "from_date", value: "2025-05-01T00:00:00.000Z"),
            URLQueryItem(name: "to_date", value: "2025-05-31T23:59:59.999Z"),
            URLQueryItem(name: "group_by", value: "users"),
            URLQueryItem(name: "filter", value: "{\"criteria\":[{\"cfid\":\"32\",\"criteria_condition\":\"contains\",\"value\":[\"Network\"]}],\"pattern\":\"1\",\"is_saved\":false,\"isclearfilter\":true}"),
            URLQueryItem(name: "next_token", value: "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        project_id : "23806000097545166" from_date : "2025-05-01T00:00:00.000Z" to_date : "2025-05-31T23:59:59.999Z" group_by : "users" filter : {"criteria":[{"cfid":"32","criteria_condition":"contains","value":["Network"]}],"pattern":"1","is_saved":false,"isclearfilter":true} next_token : "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637"

        Sample Response

        200{ "id" : "4000000549001", "next_token" : "projects-99de5bbbfd5a29869a95cc2a0c02730fe77b9cf67ad2b7f5800445cc01583e26a8580a97622e7ff88dda837ef21ad24fb97e6eb8f06f1f41feb9761a201d3b9ba4939b375b5935c2cddd7d8b54654b32cce38d47db390c7cafba052fadb82f1d60d558b829611462a000a25c9cdf1e2d4f8eadd6eef30e3b7c802c807fc2c59672c30a75650e3621d53708e3d4ec738805a576354d47dd305db1756ca576a8da131c8d8042bf7eaf8d5464ac275f1a8ba9a70474deaa7f8809578e7bcc82706a11cef928393829993cdb62c0a89fa637", "entity_details" : [ { "id" : "4000000735001", "name" : "Network Throttle Test", "is_parent" : false, "custom_status_id" : "4000000000356", "start_date" : "2025-05-06 09:00", "end_date" : "2025-05-08 15:00", "duration" : "3", "percent_complete" : "0", "is_duration_work" : true, "is_closed" : false, "work_type" : "0", "is_cascade_work" : false, "item_number" : "WR1-T70", "day_work" : [ { "date" : "2025-05-06", "work" : "540" }, { "date" : "2025-05-08", "work" : "360" }, { "date" : "2025-05-07", "work" : "540" } ], "project_id" : "4000000303005", "duration_hours" : "24:0", "business_hour_id" : "4000000568047", "total_work" : "1440" } ] }
        Create Report Folder

        to create report folder

        POST

        /api/v3/portal/[PORTALID]/reports/folders

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 200

        Enter the name of the report folder

        description

        String

        max length : 10000

        Enter the description of the report folder

        access_type

        String

        access type

        JSONObject

        Enter the project information.

        JSONObject

        Enter the project information.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("access_type", "-");
        params.put("project", {"id":"4000000062001"});
        params.put("reports", {"id":"4000000062001"});
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders');
        
        const payload = JSON.stringify({"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""access_type"":""-"",""project"":{""id"":""4000000062001""},""reports"":{""id"":""4000000062001""}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"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/reports/folders");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "access_type" : "-", "project" : { "id" : "4000000062001" }, "reports" : { "id" : "4000000062001" } }

        Sample Response

        201{ "id" : "8000000113001", "name" : "new report folder", "created_time" : "2025-12-31T06:38:40.405Z", "updated_time" : "2025-12-31T06:38:40.405Z", "is_global_view" : true, "is_default" : false, "created_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "updated_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "bg_theme" : "theme_3" }
        Update Report Folder

        to update the report folder details

        PATCH

        /api/v3/portal/[PORTALID]/reports/folders/[FOLDERID]

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 200

        Enter the name of the report folder

        description

        String

        max length : 10000

        Enter the description of the report folder

        access_type

        String

        access type

        JSONObject

        Enter the project information.

        JSONObject

        Enter the project information.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("access_type", "-");
        params.put("project", {"id":"4000000062001"});
        params.put("reports", {"id":"4000000062001"});
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260');
        
        const payload = JSON.stringify({"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""access_type"":""-"",""project"":{""id"":""4000000062001""},""reports"":{""id"":""4000000062001""}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"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/reports/folders/1752587000000097260");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"access_type\":\"-\",\"project\":{\"id\":\"4000000062001\"},\"reports\":{\"id\":\"4000000062001\"}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","access_type":"-","project":{"id":"4000000062001"},"reports":{"id":"4000000062001"}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "access_type" : "-", "project" : { "id" : "4000000062001" }, "reports" : { "id" : "4000000062001" } }

        Sample Response

        200{ "id" : "8000000113001", "name" : "edit folder name", "created_time" : "2025-12-31T06:38:40.405Z", "updated_time" : "2025-12-31T06:39:58.806Z", "is_global_view" : true, "is_default" : false, "created_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "updated_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "bg_theme" : "theme_3" }
        Delete Report Folder

        to delete the report folder

        DELETE

        /api/v3/portal/[PORTALID]/reports/folders/[FOLDERID]

        OAuth Scope:

        ZohoProjects.portals.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/reports/folders/1752587000000097260");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Reorder Report Folder

        to re-order the report folder

        PUT

        /api/v3/portal/[PORTALID]/reports/folders/[FOLDERID]/reorder

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        before

        long

        before this Folder Id

        after

        long

        after this Folder Id

        position

        String

        first,last position

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PUT \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"before":"-","after":"-","position":"-"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder";
        params = Map();
        params.put("before", "-");
        params.put("after", "-");
        params.put("position", "-");
        response = invokeUrl
        [
            url: url
            type: PUT
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder');
        
        const payload = JSON.stringify({"before":"-","after":"-","position":"-"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Put.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"before":"-","after":"-","position":"-"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PUT",
          CURLOPT_POSTFIELDS => '{"before":"-","after":"-","position":"-"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"before":"-","after":"-","position":"-"}'
        
        response = requests.put(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder");
        request.Content = new StringContent(
            @"{""before"":""-"",""after"":""-"",""position"":""-""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}")
            req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PUT https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"before":"-","after":"-","position":"-"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder");
        HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder';
        
        const options = {
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"before":"-","after":"-","position":"-"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"before":"-","after":"-","position":"-"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PUT"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"before":"-","after":"-","position":"-"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PUT"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"before":"-","after":"-","position":"-"}|json} in
          Lwt_main.run (
            Client.put ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"before":"-","after":"-","position":"-"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder" -Method PUT -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder"
        
        response <- PUT(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/folders/1752587000000097260/reorder")!
        var request = URLRequest(url: url)
        request.httpMethod = "PUT"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"before":"-","after":"-","position":"-"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "before" : "-", "after" : "-", "position" : "-" }

        Sample Response

        204 No Content
        Create Report

        Create Report

        POST

        /api/v3/portal/[PORTALID]/reports

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 100

        Enter the name of the custom report

        description

        String

        max length : 500

        description of the report

        JSONObject

        Enter the associated folder ID

        module_name

        String

        required

        Enter the name of the module.
        Accepted values: {regex}

        chart_type

        String

        required

        Enter the chart type
        Accepted values: bar,hbar,pie,donut,stacked,hstacked,clustered,hclustered,sunburst,line,area,embed,analytics,kpi

        chart_configuration

        JSONArray

        array size : 1-2

        Specify the chart configuration.

        JSONObject

        Details for time report Span

        is_widget

        boolean

        true if created as widget from the dashboard

        widget_configuration

        JSONObject

        Widget Configuration

        additional_info

        JSONObject

        max length : 1000
        array size : >=0

        additional fields

        criteria

        String

        Enter the criteria.

        conditional_expression

        String

        Enter the criteria expression.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("folder", {"id":"4000000062001"});
        params.put("module_name", "-");
        params.put("chart_type", "-");
        params.put("chart_configuration", [{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}]);
        params.put("timespan", {"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"});
        params.put("is_widget", "-");
        params.put("widget_configuration", {"x":"-","y":"-","h":"-","w":"-"});
        params.put("additional_info", {"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}});
        params.put("criteria", "-");
        params.put("conditional_expression", "-");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports');
        
        const payload = JSON.stringify({"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"is_widget\":\"-\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"criteria\":\"-\",\"conditional_expression\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""folder"":{""id"":""4000000062001""},""module_name"":""-"",""chart_type"":""-"",""chart_configuration"":[{""report_field"":""-"",""aggregate_function"":""-"",""group_by"":""users"",""embed_url"":""-"",""kpi_widget_position_type"":""-"",""is_dashboard"":""-"",""analytics_id"":""-""}],""timespan"":{""offsetleft"":""-"",""offsetright"":""-"",""type"":""Task"",""from"":""-"",""to"":""-""},""is_widget"":""-"",""widget_configuration"":{""x"":""-"",""y"":""-"",""h"":""-"",""w"":""-""},""additional_info"":{""cumulative"":""-"",""kpi_settings"":{""kpi_symbol_direction"":""-"",""kpi_numeric_symbol"":""-"",""kpi_precision_type"":""-"",""kpi_precision"":""-"",""kpi_widget_position_type"":""-""}},""criteria"":""-"",""conditional_expression"":""-""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"is_widget\":\"-\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"criteria\":\"-\",\"conditional_expression\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/reports"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"is_widget\":\"-\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"criteria\":\"-\",\"conditional_expression\":\"-\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"is_widget\":\"-\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"criteria\":\"-\",\"conditional_expression\":\"-\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/reports HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/reports");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"is_widget\":\"-\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"criteria\":\"-\",\"conditional_expression\":\"-\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"is_widget\":\"-\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"criteria\":\"-\",\"conditional_expression\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"folder\":{\"id\":\"4000000062001\"},\"module_name\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"is_widget\":\"-\",\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"criteria\":\"-\",\"conditional_expression\":\"-\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","folder":{"id":"4000000062001"},"module_name":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"is_widget":"-","widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"criteria":"-","conditional_expression":"-"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "folder" : { "id" : "4000000062001" }, "module_name" : "-", "chart_type" : "-", "chart_configuration" : [ { "report_field" : "-", "aggregate_function" : "-", "group_by" : "users", "embed_url" : "-", "kpi_widget_position_type" : "-", "is_dashboard" : "-", "analytics_id" : "-" } ], "timespan" : { "offsetleft" : "-", "offsetright" : "-", "type" : "Task", "from" : "-", "to" : "-" }, "is_widget" : "-", "widget_configuration" : { "x" : "-", "y" : "-", "h" : "-", "w" : "-" }, "additional_info" : { "cumulative" : "-", "kpi_settings" : { "kpi_symbol_direction" : "-", "kpi_numeric_symbol" : "-", "kpi_precision_type" : "-", "kpi_precision" : "-", "kpi_widget_position_type" : "-" } }, "criteria" : "-", "conditional_expression" : "-" }

        Sample Response

        201{ "id" : "8000000113007", "name" : "new report with criteria option", "folder" : { "id" : "8000000113001" }, "chart_type" : "hstacked", "sequence" : "1", "is_default" : false, "created_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "updated_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "created_time" : "2025-12-31T06:40:38.885Z", "updated_time" : "2025-12-31T06:40:38.886Z", "chart_configuration" : [ { "group_by" : [ "owners", "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "criteria" : [ { "condition" : "is", "value" : [ "8000000043070" ], "operation" : "", "field_name" : "81" } ], "conditional_expression" : "1 AND 2 AND 3", "module" : { "id" : "8000000000146", "name" : "Task" }, "report_type" : "customreport" }
        Update Report

        Update Report

        PATCH

        /api/v3/portal/[PORTALID]/reports/[REPORTID]

        OAuth Scope:

        ZohoProjects.portals.READ

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        max length : 100

        Enter the name of the custom report

        description

        String

        max length : 500

        description of the report

        chart_type

        String

        Enter the chart type
        Accepted values: bar,hbar,pie,donut,stacked,hstacked,clustered,hclustered,sunburst,line,area,kpi

        chart_configuration

        JSONArray

        array size : 1-2

        Specify the chart configuration.

        JSONObject

        Enter the associated folder ID

        JSONObject

        Details for time report Span

        additional_info

        JSONObject

        max length : 1000
        array size : >=0

        additional fields

        widget_configuration

        JSONObject

        Widget Configuration

        criteria

        String

        Enter the criteria.

        conditional_expression

        String

        Enter the criteria expression.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]";
        params = Map();
        params.put("name", "-");
        params.put("description", "-");
        params.put("chart_type", "-");
        params.put("chart_configuration", [{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}]);
        params.put("folder", {"id":"4000000062001"});
        params.put("timespan", {"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"});
        params.put("additional_info", {"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}});
        params.put("widget_configuration", {"x":"-","y":"-","h":"-","w":"-"});
        params.put("criteria", "-");
        params.put("conditional_expression", "-");
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]');
        
        const payload = JSON.stringify({"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"criteria\":\"-\",\"conditional_expression\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]");
        request.Content = new StringContent(
            @"{""name"":""-"",""description"":""-"",""chart_type"":""-"",""chart_configuration"":[{""report_field"":""-"",""aggregate_function"":""-"",""group_by"":""users"",""embed_url"":""-"",""kpi_widget_position_type"":""-"",""is_dashboard"":""-"",""analytics_id"":""-""}],""folder"":{""id"":""4000000062001""},""timespan"":{""offsetleft"":""-"",""offsetright"":""-"",""type"":""Task"",""from"":""-"",""to"":""-""},""additional_info"":{""cumulative"":""-"",""kpi_settings"":{""kpi_symbol_direction"":""-"",""kpi_numeric_symbol"":""-"",""kpi_precision_type"":""-"",""kpi_precision"":""-"",""kpi_widget_position_type"":""-""}},""widget_configuration"":{""x"":""-"",""y"":""-"",""h"":""-"",""w"":""-""},""criteria"":""-"",""conditional_expression"":""-""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"criteria\":\"-\",\"conditional_expression\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"criteria\":\"-\",\"conditional_expression\":\"-\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"criteria\":\"-\",\"conditional_expression\":\"-\"}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"criteria\":\"-\",\"conditional_expression\":\"-\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"criteria\":\"-\",\"conditional_expression\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"-\",\"description\":\"-\",\"chart_type\":\"-\",\"chart_configuration\":[{\"report_field\":\"-\",\"aggregate_function\":\"-\",\"group_by\":\"users\",\"embed_url\":\"-\",\"kpi_widget_position_type\":\"-\",\"is_dashboard\":\"-\",\"analytics_id\":\"-\"}],\"folder\":{\"id\":\"4000000062001\"},\"timespan\":{\"offsetleft\":\"-\",\"offsetright\":\"-\",\"type\":\"Task\",\"from\":\"-\",\"to\":\"-\"},\"additional_info\":{\"cumulative\":\"-\",\"kpi_settings\":{\"kpi_symbol_direction\":\"-\",\"kpi_numeric_symbol\":\"-\",\"kpi_precision_type\":\"-\",\"kpi_precision\":\"-\",\"kpi_widget_position_type\":\"-\"}},\"widget_configuration\":{\"x\":\"-\",\"y\":\"-\",\"h\":\"-\",\"w\":\"-\"},\"criteria\":\"-\",\"conditional_expression\":\"-\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"-","description":"-","chart_type":"-","chart_configuration":[{"report_field":"-","aggregate_function":"-","group_by":"users","embed_url":"-","kpi_widget_position_type":"-","is_dashboard":"-","analytics_id":"-"}],"folder":{"id":"4000000062001"},"timespan":{"offsetleft":"-","offsetright":"-","type":"Task","from":"-","to":"-"},"additional_info":{"cumulative":"-","kpi_settings":{"kpi_symbol_direction":"-","kpi_numeric_symbol":"-","kpi_precision_type":"-","kpi_precision":"-","kpi_widget_position_type":"-"}},"widget_configuration":{"x":"-","y":"-","h":"-","w":"-"},"criteria":"-","conditional_expression":"-"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "-", "description" : "-", "chart_type" : "-", "chart_configuration" : [ { "report_field" : "-", "aggregate_function" : "-", "group_by" : "users", "embed_url" : "-", "kpi_widget_position_type" : "-", "is_dashboard" : "-", "analytics_id" : "-" } ], "folder" : { "id" : "4000000062001" }, "timespan" : { "offsetleft" : "-", "offsetright" : "-", "type" : "Task", "from" : "-", "to" : "-" }, "additional_info" : { "cumulative" : "-", "kpi_settings" : { "kpi_symbol_direction" : "-", "kpi_numeric_symbol" : "-", "kpi_precision_type" : "-", "kpi_precision" : "-", "kpi_widget_position_type" : "-" } }, "widget_configuration" : { "x" : "-", "y" : "-", "h" : "-", "w" : "-" }, "criteria" : "-", "conditional_expression" : "-" }

        Sample Response

        200{ "id" : "8000000113007", "name" : "new report with criteria option", "folder" : { "id" : "8000000113001" }, "chart_type" : "hstacked", "sequence" : "1", "is_default" : false, "created_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "updated_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "created_time" : "2025-12-31T06:40:38.885Z", "updated_time" : "2025-12-31T06:40:52.273Z", "chart_configuration" : [ { "group_by" : [ "owners", "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "criteria" : [ { "condition" : "is", "value" : [ "8000000043070" ], "operation" : "", "field_name" : "81" } ], "conditional_expression" : "1 AND 2 AND 3", "module" : { "id" : "8000000000146", "name" : "Task" }, "report_type" : "customreport" }
        Clone Report

        Clone Report Details

        POST

        /api/v3/portal/[PORTALID]/reports/[REPORTID]/clone

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone";
        response = invokeUrl
        [
            url: url
            type: POST
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/reports/[REPORTID]/clone");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone" -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/clone")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        201{ "id" : "8000000113013", "name" : "new report with criteria option", "folder" : { "id" : "8000000113001" }, "chart_type" : "hstacked", "sequence" : "2", "is_default" : false, "created_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "updated_by" : { "zuid" : "43479715", "zpuid" : "8000000002635", "name" : "James", "email" : "james.parker@zylker.com", "first_name" : "James", "last_name" : "Parker", "full_name" : "James Parker" }, "created_time" : "2025-12-31T06:41:17.060Z", "updated_time" : "2025-12-31T06:41:17.060Z", "chart_configuration" : [ { "group_by" : [ "owners", "status" ], "report_field" : "Task", "aggregate_function" : "count" } ], "is_editable" : true, "criteria" : [ { "condition" : "is", "value" : [ "8000000043070" ], "operation" : "", "field_name" : "81" } ], "conditional_expression" : "1", "module" : { "id" : "8000000000146", "name" : "Task" }, "report_type" : "customreport" }
        Delete Report

        to delete Report

        DELETE

        /api/v3/portal/[PORTALID]/reports/[REPORTID]

        OAuth Scope:

        ZohoProjects.portals.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/reports/[REPORTID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content
        Reorder Report

        Reorder Report Details

        PUT

        /api/v3/portal/[PORTALID]/reports/[REPORTID]/reorder

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        folder_id

        long

        required

        Folder Id

        before

        long

        before this Report Id

        after

        long

        after this Report Id

        position

        String

        first,last position

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PUT \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"folder_id":"-","before":"-","after":"-","position":"-"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder";
        params = Map();
        params.put("folder_id", "-");
        params.put("before", "-");
        params.put("after", "-");
        params.put("position", "-");
        response = invokeUrl
        [
            url: url
            type: PUT
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder');
        
        const payload = JSON.stringify({"folder_id":"-","before":"-","after":"-","position":"-"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Put.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"folder_id":"-","before":"-","after":"-","position":"-"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PUT",
          CURLOPT_POSTFIELDS => '{"folder_id":"-","before":"-","after":"-","position":"-"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"folder_id":"-","before":"-","after":"-","position":"-"}'
        
        response = requests.put(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"folder_id\":\"-\",\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder");
        request.Content = new StringContent(
            @"{""folder_id"":""-"",""before"":""-"",""after"":""-"",""position"":""-""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"folder_id\":\"-\",\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"folder_id\":\"-\",\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"folder_id\":\"-\",\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}")
            req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PUT https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"folder_id":"-","before":"-","after":"-","position":"-"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder");
        HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"folder_id\":\"-\",\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder';
        
        const options = {
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"folder_id":"-","before":"-","after":"-","position":"-"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"folder_id":"-","before":"-","after":"-","position":"-"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PUT"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"folder_id":"-","before":"-","after":"-","position":"-"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PUT"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"folder_id\":\"-\",\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"folder_id":"-","before":"-","after":"-","position":"-"}|json} in
          Lwt_main.run (
            Client.put ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"folder_id":"-","before":"-","after":"-","position":"-"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder" -Method PUT -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder"
        
        response <- PUT(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"folder_id\":\"-\",\"before\":\"-\",\"after\":\"-\",\"position\":\"-\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/reports/[REPORTID]/reorder")!
        var request = URLRequest(url: url)
        request.httpMethod = "PUT"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"folder_id":"-","before":"-","after":"-","position":"-"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "folder_id" : "-", "before" : "-", "after" : "-", "position" : "-" }

        Sample Response

        204 No Content
        Integrations

        This module covers integration related operations within Zoho Projects, including connections with various Zoho applications and third-party services. Use these APIs to manage integrations, update settings, and retrieve data.

        Module Integration

        This module covers operations related to integrations associated with modules within Zoho Projects. Use this API to manage integrations associated with the modules. This is currently supported for projects module only.

        Get Integration Details

        Retrieve the integration details of a module from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/entity/integrations

        OAuth Scope:

        ZohoProjects.integrations.READ

        Query Parameter

        Param Name
        Data Type
        Description
        module

        string

        required

        Enter the api name or module id.

        entity_ids

        string

        Enter the entity ID's (comma separated).

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations";
        params = Map();
        params.put("module", "projects");
        params.put("entity_ids", "1752587000000097299, 1752587000000097300");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations');
        
        const payload = JSON.stringify({"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_POSTFIELDS => '{"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}'
        
        response = requests.get(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"projects\",\"entity_ids\":\"1752587000000097299, 1752587000000097300\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations");
        request.Content = new StringContent(
            @"{""module"":""projects"",""entity_ids"":""1752587000000097299, 1752587000000097300""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"module\":\"projects\",\"entity_ids\":\"1752587000000097299, 1752587000000097300\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"module\":\"projects\",\"entity_ids\":\"1752587000000097299, 1752587000000097300\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"module\":\"projects\",\"entity_ids\":\"1752587000000097299, 1752587000000097300\"}")
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"module\":\"projects\",\"entity_ids\":\"1752587000000097299, 1752587000000097300\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}|json} in
          Lwt_main.run (
            Client.get ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations" -Method GET -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"module\":\"projects\",\"entity_ids\":\"1752587000000097299, 1752587000000097300\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/entity/integrations")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"module":"projects","entity_ids":"1752587000000097299, 1752587000000097300"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "module" : "projects", "entity_ids" : "1752587000000097299, 1752587000000097300" }

        Sample Response

        200{ "page_info" : { "page" : 1, "per_page" : 200, "page_count" : 3, "has_next_page" : false }, "entities" : [ { "id" : "11000000012019", "name" : "test-project", "integrations" : [ { "finance" : { "project_id" : "15921000000014394" } } ] }, { "id" : "11000000010145", "name" : "vignesh-project" }, { "id" : "11000000010015", "name" : "test project" } ] }

        Possible Errors

        NO_PROJECTS HTTP 200

        INVALID_PROJECT_IDS HTTP 400

        UNSUPPORTED_MODULE HTTP 400

        INVALID_ENTITY_IDS HTTP 400

        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@zylker.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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/leave?index=1&range=100' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave";
        params = Map();
        params.put("index", "1");
        params.put("range", "100");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/leave');
        url.searchParams.append('index', '1');
        url.searchParams.append('range', '100');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/leave")
        params = {
          "index" => "1",
          "range" => "100"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'index' => '1',
            'range' => '100',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave"
        
        params = {
            "index": "1",
            "range": "100"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_index = curl_easy_escape(curl, "1", 0);
                char *enc_range = curl_easy_escape(curl, "100", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/leave?index=%s&range=%s", enc_index, enc_range);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_index);
                curl_free(enc_range);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["index"] = "1";
        query["range"] = "100";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/leave") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_index = curl_easy_escape(curl, "1", 0);
                char* enc_range = curl_easy_escape(curl, "100", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave";
                url += "?index=" + std::string(enc_index);
                url += "&range=" + std::string(enc_range);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_index);
                curl_free(enc_range);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-index (java.net.URLEncoder/encode "1" "UTF-8")
              enc-range (java.net.URLEncoder/encode "100" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/leave" "?index=" enc-index "&range=" enc-range)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/leave", nil)
            q := req.URL.Query()
            q.Add("index", "1")
            q.Add("range", "100")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/leave?index=1&range=100 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("index", "1");
        uriBuilder.addParameter("range", "100");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/leave';
        
        const params = new URLSearchParams({
          'index': '1',
          'range': '100'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        index = "1"
        range = "100"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("index", "1")
            urlBuilder.addQueryParameter("range", "100")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedIndex = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedRange = [@"100" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/leave?index=%@&range=%@", encodedIndex, encodedRange];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_index = Uri.pct_encode "1" in
          let enc_range = Uri.pct_encode "100" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/leave" ^ "?index=" ^ enc_index ^ "&range=" ^ enc_range) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            index = "1"
            range = "100"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/leave"
        
        params <- list(
          index = "1",
          range = "100"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/leave")!
        components.queryItems = [
            URLQueryItem(name: "index", value: "1"),
            URLQueryItem(name: "range", value: "100")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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" : "Miller", "first_name" : "John", "email" : "john.miller@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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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" : "Michael", "last_name" : "Dunn", "first_name" : "Michael", "email" : "michael.dunn@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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/leave' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave";
        params = Map();
        params.put("user", {"zpuid":"4000000002055"});
        params.put("type", "Casual Leave");
        params.put("from_date", "2024-07-01T00:00:00.000Z");
        params.put("to_date", "2024-07-31T23:59:59.000Z");
        params.put("reason", "Vacation");
        params.put("reference_id", "205");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/leave');
        
        const payload = JSON.stringify({"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/leave")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave");
        request.Content = new StringContent(
            @"{""user"":{""zpuid"":""4000000002055""},""type"":""Casual Leave"",""from_date"":""2024-07-01T00:00:00.000Z"",""to_date"":""2024-07-31T23:59:59.000Z"",""reason"":""Vacation"",""reference_id"":""205""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/leave"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/leave", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/leave HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/leave';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/leave")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/leave"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/leave" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/leave" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/leave"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/leave")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "user" : { "zpuid" : "4000000002055" }, "type" : "Casual Leave", "from_date" : "2024-07-01T00:00:00.000Z", "to_date" : "2024-07-31T23:59:59.000Z", "reason" : "Vacation", "reference_id" : "205" }

        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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]";
        params = Map();
        params.put("user", {"zpuid":"4000000002055"});
        params.put("type", "Casual Leave");
        params.put("from_date", "2024-07-01T00:00:00.000Z");
        params.put("to_date", "2024-07-31T23:59:59.000Z");
        params.put("reason", "Vacation");
        params.put("reference_id", "205");
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]');
        
        const payload = JSON.stringify({"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
        request.Content = new StringContent(
            @"{""user"":{""zpuid"":""4000000002055""},""type"":""Casual Leave"",""from_date"":""2024-07-01T00:00:00.000Z"",""to_date"":""2024-07-31T23:59:59.000Z"",""reason"":""Vacation"",""reference_id"":""205""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"user\":{\"zpuid\":\"4000000002055\"},\"type\":\"Casual Leave\",\"from_date\":\"2024-07-01T00:00:00.000Z\",\"to_date\":\"2024-07-31T23:59:59.000Z\",\"reason\":\"Vacation\",\"reference_id\":\"205\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"user":{"zpuid":"4000000002055"},"type":"Casual Leave","from_date":"2024-07-01T00:00:00.000Z","to_date":"2024-07-31T23:59:59.000Z","reason":"Vacation","reference_id":"205"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "user" : { "zpuid" : "4000000002055" }, "type" : "Casual Leave", "from_date" : "2024-07-01T00:00:00.000Z", "to_date" : "2024-07-31T23:59:59.000Z", "reason" : "Vacation", "reference_id" : "205" }

        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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/leave/[LEAVEID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        204 No Content

        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

        default : 1

        Enter the page number.

        per_page

        int

        limit : 1-200
        default : 100

        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 for default modules: all,projects,milestones,tasklists,tasks,bugs,forums,events,status
        For Custom modules : Enter the API name of the custom module. You can use this API to get the API names of the custom modules.

        status

        String

        required

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

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/search?page=1&per_page=10&search_term=task+name&module=tasks&status=active' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/search";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        params.put("search_term", "task name");
        params.put("module", "tasks");
        params.put("status", "active");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/search');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        url.searchParams.append('search_term', 'task name');
        url.searchParams.append('module', 'tasks');
        url.searchParams.append('status', 'active');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/search")
        params = {
          "page" => "1",
          "per_page" => "10",
          "search_term" => "task name",
          "module" => "tasks",
          "status" => "active"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
            'search_term' => 'task name',
            'module' => 'tasks',
            'status' => 'active',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/search" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/search"
        
        params = {
            "page": "1",
            "per_page": "10",
            "search_term": "task name",
            "module": "tasks",
            "status": "active"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char *enc_search_term = curl_easy_escape(curl, "task name", 0);
                char *enc_module = curl_easy_escape(curl, "tasks", 0);
                char *enc_status = curl_easy_escape(curl, "active", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/search?page=%s&per_page=%s&search_term=%s&module=%s&status=%s", enc_page, enc_per_page, enc_search_term, enc_module, enc_status);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_search_term);
                curl_free(enc_module);
                curl_free(enc_status);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        query["search_term"] = "task name";
        query["module"] = "tasks";
        query["status"] = "active";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/search") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                char* enc_search_term = curl_easy_escape(curl, "task name", 0);
                char* enc_module = curl_easy_escape(curl, "tasks", 0);
                char* enc_status = curl_easy_escape(curl, "active", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/search";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
                url += "&search_term=" + std::string(enc_search_term);
                url += "&module=" + std::string(enc_module);
                url += "&status=" + std::string(enc_status);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_search_term);
                curl_free(enc_module);
                curl_free(enc_status);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              enc-search_term (java.net.URLEncoder/encode "task name" "UTF-8")
              enc-module (java.net.URLEncoder/encode "tasks" "UTF-8")
              enc-status (java.net.URLEncoder/encode "active" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/search" "?page=" enc-page "&per_page=" enc-per_page "&search_term=" enc-search_term "&module=" enc-module "&status=" enc-status)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/search", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            q.Add("search_term", "task name")
            q.Add("module", "tasks")
            q.Add("status", "active")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/search?page=1&per_page=10&search_term=task+name&module=tasks&status=active HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        uriBuilder.addParameter("search_term", "task name");
        uriBuilder.addParameter("module", "tasks");
        uriBuilder.addParameter("status", "active");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/search';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10',
          'search_term': 'task name',
          'module': 'tasks',
          'status': 'active'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        search_term = "task name"
        module = "tasks"
        status = "active"
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/search".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            urlBuilder.addQueryParameter("search_term", "task name")
            urlBuilder.addQueryParameter("module", "tasks")
            urlBuilder.addQueryParameter("status", "active")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSearch_term = [@"task name" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedModule = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedStatus = [@"active" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/search?page=%@&per_page=%@&search_term=%@&module=%@&status=%@", encodedPage, encodedPer_page, encodedSearch_term, encodedModule, encodedStatus];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let enc_search_term = Uri.pct_encode "task name" in
          let enc_module = Uri.pct_encode "tasks" in
          let enc_status = Uri.pct_encode "active" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/search" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&search_term=" ^ enc_search_term ^ "&module=" ^ enc_module ^ "&status=" ^ enc_status) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
            search_term = "task name"
            module = "tasks"
            status = "active"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/search" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/search"
        
        params <- list(
          page = "1",
          per_page = "10",
          search_term = "task name",
          module = "tasks",
          status = "active"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/search")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10"),
            URLQueryItem(name: "search_term", value: "task name"),
            URLQueryItem(name: "module", value: "tasks"),
            URLQueryItem(name: "status", value: "active")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

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

        Sample Response

        "200"{ "count" : 2, "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" : "#2cc8ba", "name" : "active", "id" : "123905000000027089", "color_code" : "#2cc8ba", "is_closed" : false } }, "project" : { "name" : "ProjectDemoFor ISO", "id" : "123905000000070005", "status" : "active" }, "assignee" : [ { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com", "zuid" : "738624987" } ], "entity_id" : "123905000000070005", "title" : "ProjectDemoFor ISO", "created_by" : { "zpuid" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com", "zuid" : "738624987" }, "key" : "ZO-2", "tags" : [ { "id" : "180469000000147007", "name" : "ZohoProjects", "color_hexcode" : "#57c065", "createdby" : "180469000000060003", "usage_count" : 0 }, { "id" : "180469000000147003", "name" : "Test", "color_hexcode" : "#57c065", "createdby" : "180469000000060003", "usage_count" : 0 } ] }, { "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" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com", "zuid" : "738624987" }, "tags" : [ { "id" : "180469000000147007", "name" : "ZohoProjects", "color_hexcode" : "#57c065", "createdby" : "180469000000060003", "usage_count" : 0 }, { "id" : "180469000000147003", "name" : "Test", "color_hexcode" : "#57c065", "createdby" : "180469000000060003", "usage_count" : 0 } ] } ] }
        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

        default : 1

        Enter the page number.

        per_page

        int

        limit : 1-200
        default : 100

        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 for default modules: all,projects,milestones,tasklists,tasks,bugs,forums,events,status
        For Custom modules : Enter the API name of the custom module. You can use this API to get the API names of the custom modules.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search?page=1&per_page=10&search_term=task+name&module=tasks' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        params.put("search_term", "task name");
        params.put("module", "tasks");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        url.searchParams.append('search_term', 'task name');
        url.searchParams.append('module', 'tasks');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search")
        params = {
          "page" => "1",
          "per_page" => "10",
          "search_term" => "task name",
          "module" => "tasks"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
            'search_term' => 'task name',
            'module' => 'tasks',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search"
        
        params = {
            "page": "1",
            "per_page": "10",
            "search_term": "task name",
            "module": "tasks"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char *enc_search_term = curl_easy_escape(curl, "task name", 0);
                char *enc_module = curl_easy_escape(curl, "tasks", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search?page=%s&per_page=%s&search_term=%s&module=%s", enc_page, enc_per_page, enc_search_term, enc_module);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_search_term);
                curl_free(enc_module);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        query["search_term"] = "task name";
        query["module"] = "tasks";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                char* enc_search_term = curl_easy_escape(curl, "task name", 0);
                char* enc_module = curl_easy_escape(curl, "tasks", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
                url += "&search_term=" + std::string(enc_search_term);
                url += "&module=" + std::string(enc_module);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_search_term);
                curl_free(enc_module);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              enc-search_term (java.net.URLEncoder/encode "task name" "UTF-8")
              enc-module (java.net.URLEncoder/encode "tasks" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search" "?page=" enc-page "&per_page=" enc-per_page "&search_term=" enc-search_term "&module=" enc-module)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            q.Add("search_term", "task name")
            q.Add("module", "tasks")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search?page=1&per_page=10&search_term=task+name&module=tasks HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        uriBuilder.addParameter("search_term", "task name");
        uriBuilder.addParameter("module", "tasks");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10',
          'search_term': 'task name',
          'module': 'tasks'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        search_term = "task name"
        module = "tasks"
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            urlBuilder.addQueryParameter("search_term", "task name")
            urlBuilder.addQueryParameter("module", "tasks")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSearch_term = [@"task name" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedModule = [@"tasks" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search?page=%@&per_page=%@&search_term=%@&module=%@", encodedPage, encodedPer_page, encodedSearch_term, encodedModule];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let enc_search_term = Uri.pct_encode "task name" in
          let enc_module = Uri.pct_encode "tasks" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&search_term=" ^ enc_search_term ^ "&module=" ^ enc_module) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
            search_term = "task name"
            module = "tasks"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search"
        
        params <- list(
          page = "1",
          per_page = "10",
          search_term = "task name",
          module = "tasks"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/search")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10"),
            URLQueryItem(name: "search_term", value: "task name"),
            URLQueryItem(name: "module", value: "tasks")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

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

        Sample Response

        "200"{ "count" : 2, "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" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com", "zuid" : "738624987" }, "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" : "1752587000000036003", "name" : "Patricia Boyle", "last_name" : "Boyle", "first_name" : "Patricia", "email" : "patricia.boyle@zylker.com", "zuid" : "738624987" }, "tags" : [ ], "completed_time" : "2022-09-28T08:35:15.051Z", "extra_data" : { "due_date" : "2023-02-14T01:15:00.000Z", "severity_id" : "123905000000054149", "status" : { "color" : "#49e6cf", "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" } ] }
        Feed

        This module covers feed-related operations within Zoho Projects. Use this API to retrieve feed activities and add/update feed comments.

        Feed Status

        This module covers feed status related operations within Zoho Projects. Use this API to retrieve, post, update, delete, and remove feed status.

        Project Status

        Retrieve the status from a project.

        GET

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

        OAuth Scope:

        ZohoProjects.status.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. Accepted values: DESC,ASC.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status?page=1&per_page=10&sort_by=ASC%28last_modified_time%29' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status";
        params = Map();
        params.put("page", "1");
        params.put("per_page", "10");
        params.put("sort_by", "ASC(last_modified_time)");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        url.searchParams.append('sort_by', 'ASC(last_modified_time)');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status")
        params = {
          "page" => "1",
          "per_page" => "10",
          "sort_by" => "ASC(last_modified_time)"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'page' => '1',
            'per_page' => '10',
            'sort_by' => 'ASC(last_modified_time)',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status"
        
        params = {
            "page": "1",
            "per_page": "10",
            "sort_by": "ASC(last_modified_time)"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status?page=%s&per_page=%s&sort_by=%s", enc_page, enc_per_page, enc_sort_by);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_sort_by);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["page"] = "1";
        query["per_page"] = "10";
        query["sort_by"] = "ASC(last_modified_time)";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status";
                url += "?page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
                url += "&sort_by=" + std::string(enc_sort_by);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_free(enc_sort_by);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status" "?page=" enc-page "&per_page=" enc-per_page "&sort_by=" enc-sort_by)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status", nil)
            q := req.URL.Query()
            q.Add("page", "1")
            q.Add("per_page", "10")
            q.Add("sort_by", "ASC(last_modified_time)")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status?page=1&per_page=10&sort_by=ASC%28last_modified_time%29 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/status");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status';
        
        const params = new URLSearchParams({
          'page': '1',
          'per_page': '10',
          'sort_by': 'ASC(last_modified_time)'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        page = "1"
        per_page = "10"
        sort_by = "ASC(last_modified_time)"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status?page=%@&per_page=%@&sort_by=%@", encodedPage, encodedPer_page, encodedSort_by];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status" ^ "?page=" ^ enc_page ^ "&per_page=" ^ enc_per_page ^ "&sort_by=" ^ enc_sort_by) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            page = "1"
            per_page = "10"
            sort_by = "ASC(last_modified_time)"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status"
        
        params <- list(
          page = "1",
          per_page = "10",
          sort_by = "ASC(last_modified_time)"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status")!
        components.queryItems = [
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10"),
            URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

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

        Sample Response

        200{ "page_info" : { "per_page" : "100", "has_next_page" : "false", "count" : "57", "page" : "1" }, "status" : [ { "created_time" : "2024-07-11T07:33:43.214Z", "updated_time" : "2024-07-11T12:03:46.411Z", "tag_ids" : [ "4000000031105", "4000000076019" ], "flag" : "external", "attachments" : [ { "created_time" : "1720095247498", "associated_time_long" : "1720683223279", "third_party_file_id" : "xw0ab5f9c496b7c874fc7b5e83d1ad8e0090b", "app_domain" : "workdriveUpload", "type" : "image/jpeg", "entity_id" : "4000000192017", "created_by" : "22543377", "app_name" : "WorkdriveUpload", "permanent_url" : "https://workdrive.zoho.com/file/xw0ab5f9c496b7c874fc7b5e83d1ad8e0090b?authId=%7B%22module%22%3A%22status%22%2C%22entity_id%22%3A%224000000070029_4000000192017%22%7D", "entity_type" : "status", "size" : "168829", "associated_by" : "22543377", "preview_url" : "null?x-cli-msg=eyJtb2R1bGUiOiJzdGF0dXMiLCJlbnRpdHlfaWQiOiI0MDAwMDAwMDcwMDI5XzQwMDAwMDAxOTIwMTcifQ&size=l", "attachment_id" : "4000000164001", "name" : "Image.jpeg", "associated_by_name" : "Portal Owner", "download_url" : "null?x-cli-msg=%7B%22module%22%3A%22status%22%2C%22entity_id%22%3A%224000000070029_4000000192017%22%7D", "trashed" : false } ], "comments" : [ ], "project" : { "name" : "Sample Project", "id" : "4000000070029" }, "id" : "4000000192017", "created_by" : { "zpuid" : "4000000002239", "full_name" : "Portal Owner", "name" : "Portal", "last_name" : "Owner", "id" : "22543377", "is_client_user" : false, "first_name" : "Portal", "email" : "portalowner@zylker.com" }, "content" : "Updated Content" } ] }
        Post Project Status

        Create a new status in a project.

        POST

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

        OAuth Scope:

        ZohoProjects.status.CREATE

        Parameter

        Param Name
        Data Type
        Description
        content

        String

        required

        Enter the status content.

        flag

        String

        Enter the flag type. Accepted values: internal or external.

        tag_ids

        JSONArray

        max length : 7000
        array size : 0-100

        Enter the tag IDs to associate.

        attachment_ids

        JSONArray

        max length : 7000
        array size : 0-100

        Enter the IDs of the files to be uploaded.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
          • Python
          • C
          • C#
          • C++
          • Clojure
          • Go
          • HTTP
          • Java
          • JS Fetch
          • JSON
          • Kotlin
          • Objective-C
          • OCaml
          • PowerShell
          • R
          • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status";
        params = Map();
        params.put("content", "Sample content");
        params.put("flag", "external");
        params.put("tag_ids", "[12345678987654321]");
        params.put("attachment_ids", "[12345678987654321]");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status');
        
        const payload = JSON.stringify({"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"flag\":\"external\",\"tag_ids\":\"[12345678987654321]\",\"attachment_ids\":\"[12345678987654321]\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status");
        request.Content = new StringContent(
            @"{""content"":""Sample content"",""flag"":""external"",""tag_ids"":""[12345678987654321]"",""attachment_ids"":""[12345678987654321]""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"content\":\"Sample content\",\"flag\":\"external\",\"tag_ids\":\"[12345678987654321]\",\"attachment_ids\":\"[12345678987654321]\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"content\":\"Sample content\",\"flag\":\"external\",\"tag_ids\":\"[12345678987654321]\",\"attachment_ids\":\"[12345678987654321]\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"content\":\"Sample content\",\"flag\":\"external\",\"tag_ids\":\"[12345678987654321]\",\"attachment_ids\":\"[12345678987654321]\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","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/projects/1752587000000097024/status");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"content\":\"Sample content\",\"flag\":\"external\",\"tag_ids\":\"[12345678987654321]\",\"attachment_ids\":\"[12345678987654321]\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"content\":\"Sample content\",\"flag\":\"external\",\"tag_ids\":\"[12345678987654321]\",\"attachment_ids\":\"[12345678987654321]\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"content\":\"Sample content\",\"flag\":\"external\",\"tag_ids\":\"[12345678987654321]\",\"attachment_ids\":\"[12345678987654321]\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/projects/1752587000000097024/status")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"content":"Sample content","flag":"external","tag_ids":"[12345678987654321]","attachment_ids":"[12345678987654321]"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "content" : "Sample content", "flag" : "external", "tag_ids" : "[12345678987654321]", "attachment_ids" : "[12345678987654321]" }

        Sample Response

        201{ "created_time" : "2024-07-11T07:33:43.214Z", "updated_time" : "2024-07-11T07:33:43.214Z", "tag_ids" : [ "\"4000000076023\"" ], "flag" : "external", "attachments" : [ { "created_time" : "1720095247498", "associated_time_long" : "1720683223279", "third_party_file_id" : "xw0ab5f9c496b7c874fc7b5e83d1ad8e0090b", "app_domain" : "workdriveUpload", "type" : "image/jpeg", "entity_id" : "4000000192017", "created_by" : "22543377", "app_name" : "WorkdriveUpload", "permanent_url" : "https://workdrive.zoho.com/file/xw0ab5f9c496b7c874fc7b5e83d1ad8e0090b?authId=%7B%22module%22%3A%22status%22%2C%22entity_id%22%3A%224000000070029_4000000192017%22%7D", "entity_type" : "status", "size" : "168829", "associated_by" : "22543377", "preview_url" : "null?x-cli-msg=eyJtb2R1bGUiOiJzdGF0dXMiLCJlbnRpdHlfaWQiOiI0MDAwMDAwMDcwMDI5XzQwMDAwMDAxOTIwMTcifQ&size=l", "attachment_id" : "4000000164001", "name" : "Image.jpeg", "associated_by_name" : "Portal Owner", "download_url" : "null?x-cli-msg=%7B%22module%22%3A%22status%22%2C%22entity_id%22%3A%224000000070029_4000000192017%22%7D", "trashed" : false } ], "project" : { "name" : "Sample Project", "id" : "4000000070029" }, "id" : "4000000192017", "created_by" : { "zpuid" : "4000000002239", "full_name" : "Portal Owner", "name" : "Portal", "last_name" : "Owner", "id" : "22543377", "is_client_user" : "false", "first_name" : "Portal", "email" : "monica.hemsworth@zylker.com" }, "content" : "Sample Content" }
        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.

        Update Project Settings

        Modify the project configuration in the Zoho Projects portal.

        PATCH

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

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        project_completion_percentage

        JSONObject

        required
        max length : 50000

        Specify the configuration of project completion percentage.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects";
        params = Map();
        params.put("project_completion_percentage", {"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"});
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects');
        
        const payload = JSON.stringify({"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_completion_percentage\":{\"calculation_type\":\"weightage_based\",\"task_weightage_field\":\"Duration\",\"bug_weightage_field\":\"Work Hours\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects");
        request.Content = new StringContent(
            @"{""project_completion_percentage"":{""calculation_type"":""weightage_based"",""task_weightage_field"":""Duration"",""bug_weightage_field"":""Work Hours""}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_completion_percentage\":{\"calculation_type\":\"weightage_based\",\"task_weightage_field\":\"Duration\",\"bug_weightage_field\":\"Work Hours\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"project_completion_percentage\":{\"calculation_type\":\"weightage_based\",\"task_weightage_field\":\"Duration\",\"bug_weightage_field\":\"Work Hours\"}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"project_completion_percentage\":{\"calculation_type\":\"weightage_based\",\"task_weightage_field\":\"Duration\",\"bug_weightage_field\":\"Work Hours\"}}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory 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/projects");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"project_completion_percentage\":{\"calculation_type\":\"weightage_based\",\"task_weightage_field\":\"Duration\",\"bug_weightage_field\":\"Work Hours\"}}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"project_completion_percentage\":{\"calculation_type\":\"weightage_based\",\"task_weightage_field\":\"Duration\",\"bug_weightage_field\":\"Work Hours\"}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"project_completion_percentage\":{\"calculation_type\":\"weightage_based\",\"task_weightage_field\":\"Duration\",\"bug_weightage_field\":\"Work Hours\"}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/settings/projects")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"project_completion_percentage":{"calculation_type":"weightage_based","task_weightage_field":"Duration","bug_weightage_field":"Work Hours"}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "project_completion_percentage" : { "calculation_type" : "weightage_based", "task_weightage_field" : "Duration", "bug_weightage_field" : "Work Hours" } }

        Sample Response

        204 No Content

        Possible Errors

        PATTERN_NOT_MATCHED HTTP 400

        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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
        params = Map();
        params.put("key", "all");
        params.put("value", ["1752587000000097269"]);
        params.put("type", "entity");
        params.put("entity", {"id":"4000000062001","type":"Task","project_id":"23806000097545166"});
        params.put("count", "20");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage');
        
        const payload = JSON.stringify({"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"key\":\"all\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
        request.Content = new StringContent(
            @"{""key"":""all"",""value"":[""1752587000000097269""],""type"":""entity"",""entity"":{""id"":""4000000062001"",""type"":""Task"",""project_id"":""23806000097545166""},""count"":""20""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"key\":\"all\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"key\":\"all\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"key\":\"all\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"key":"all","value":["1752587000000097269"],"type":"entity","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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"key\":\"all\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"key\":\"all\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"key\":\"all\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"key":"all","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "key" : "all", "value" : [ "1752587000000097269" ], "type" : "entity", "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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage?key=all&type=entity&entity=%7B%22id%22%3A%224000000062001%22%2C%22type%22%3A%22Task%22%2C%22project_id%22%3A%2223806000097545166%22%7D' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
        params = Map();
        params.put("key", "all");
        params.put("type", "entity");
        params.put("entity", {"id":"4000000062001","type":"Task","project_id":"23806000097545166"});
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage');
        url.searchParams.append('key', 'all');
        url.searchParams.append('type', 'entity');
        url.searchParams.append('entity', '{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")
        params = {
          "key" => "all",
          "type" => "entity",
          "entity" => "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'key' => 'all',
            'type' => 'entity',
            'entity' => '{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        params = {
            "key": "all",
            "type": "entity",
            "entity": "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_key = curl_easy_escape(curl, "all", 0);
                char *enc_type = curl_easy_escape(curl, "entity", 0);
                char *enc_entity = curl_easy_escape(curl, "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage?key=%s&type=%s&entity=%s", enc_key, enc_type, enc_entity);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_key);
                curl_free(enc_type);
                curl_free(enc_entity);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["key"] = "all";
        query["type"] = "entity";
        query["entity"] = "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_key = curl_easy_escape(curl, "all", 0);
                char* enc_type = curl_easy_escape(curl, "entity", 0);
                char* enc_entity = curl_easy_escape(curl, "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
                url += "?key=" + std::string(enc_key);
                url += "&type=" + std::string(enc_type);
                url += "&entity=" + std::string(enc_entity);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_key);
                curl_free(enc_type);
                curl_free(enc_entity);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-key (java.net.URLEncoder/encode "all" "UTF-8")
              enc-type (java.net.URLEncoder/encode "entity" "UTF-8")
              enc-entity (java.net.URLEncoder/encode "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" "?key=" enc-key "&type=" enc-type "&entity=" enc-entity)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage", nil)
            q := req.URL.Query()
            q.Add("key", "all")
            q.Add("type", "entity")
            q.Add("entity", "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage?key=all&type=entity&entity=%7B%22id%22%3A%224000000062001%22%2C%22type%22%3A%22Task%22%2C%22project_id%22%3A%2223806000097545166%22%7D HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("key", "all");
        uriBuilder.addParameter("type", "entity");
        uriBuilder.addParameter("entity", "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage';
        
        const params = new URLSearchParams({
          'key': 'all',
          'type': 'entity',
          'entity': '{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        key = "all"
        type = "entity"
        entity = {"id":"4000000062001","type":"Task","project_id":"23806000097545166"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("key", "all")
            urlBuilder.addQueryParameter("type", "entity")
            urlBuilder.addQueryParameter("entity", "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedKey = [@"all" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedType = [@"entity" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedEntity = [@"{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage?key=%@&type=%@&entity=%@", encodedKey, encodedType, encodedEntity];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_key = Uri.pct_encode "all" in
          let enc_type = Uri.pct_encode "entity" in
          let enc_entity = Uri.pct_encode "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" ^ "?key=" ^ enc_key ^ "&type=" ^ enc_type ^ "&entity=" ^ enc_entity) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            key = "all"
            type = "entity"
            entity = "{`"id`":`"4000000062001`",`"type`":`"Task`",`"project_id`":`"23806000097545166`"}"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        params <- list(
          key = "all",
          type = "entity",
          entity = "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")!
        components.queryItems = [
            URLQueryItem(name: "key", value: "all"),
            URLQueryItem(name: "type", value: "entity"),
            URLQueryItem(name: "entity", value: "{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        key : "all" type : "entity" 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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
        params = Map();
        params.put("id", "4000000062001");
        params.put("value", ["1752587000000097269"]);
        params.put("type", "entity");
        params.put("entity", {"id":"4000000062001","type":"Task","project_id":"23806000097545166"});
        params.put("count", "20");
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage');
        
        const payload = JSON.stringify({"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
        request.Content = new StringContent(
            @"{""id"":""4000000062001"",""value"":[""1752587000000097269""],""type"":""entity"",""entity"":{""id"":""4000000062001"",""type"":""Task"",""project_id"":""23806000097545166""},""count"":""20""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"id":"4000000062001","value":["1752587000000097269"],"type":"entity","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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"id\":\"4000000062001\",\"value\":[\"1752587000000097269\"],\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"},\"count\":\"20\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"id":"4000000062001","value":["1752587000000097269"],"type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"},"count":"20"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "id" : "4000000062001", "value" : [ "1752587000000097269" ], "type" : "entity", "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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
        params = Map();
        params.put("id", "4000000062001");
        params.put("type", "entity");
        params.put("entity", {"id":"4000000062001","type":"Task","project_id":"23806000097545166"});
        response = invokeUrl
        [
            url: url
            type: DELETE
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage');
        
        const payload = JSON.stringify({"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_POSTFIELDS => '{"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}'
        
        response = requests.delete(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
        request.Content = new StringContent(
            @"{""id"":""4000000062001"",""type"":""entity"",""entity"":{""id"":""4000000062001"",""type"":""Task"",""project_id"":""23806000097545166""}}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"id\":\"4000000062001\",\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"id\":\"4000000062001\",\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}}")
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"id":"4000000062001","type":"entity","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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"id\":\"4000000062001\",\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}|json} in
          Lwt_main.run (
            Client.delete ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage" -Method DELETE -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"id\":\"4000000062001\",\"type\":\"entity\",\"entity\":{\"id\":\"4000000062001\",\"type\":\"Task\",\"project_id\":\"23806000097545166\"}}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/storage")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"id":"4000000062001","type":"entity","entity":{"id":"4000000062001","type":"Task","project_id":"23806000097545166"}}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "id" : "4000000062001", "type" : "entity", "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

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config?authorize_level=-' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config";
        params = Map();
        params.put("authorize_level", "-");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config');
        url.searchParams.append('authorize_level', '-');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config")
        params = {
          "authorize_level" => "-"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'authorize_level' => '-',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config"
        
        params = {
            "authorize_level": "-"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_authorize_level = curl_easy_escape(curl, "-", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config?authorize_level=%s", enc_authorize_level);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_authorize_level);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["authorize_level"] = "-";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_authorize_level = curl_easy_escape(curl, "-", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config";
                url += "?authorize_level=" + std::string(enc_authorize_level);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_authorize_level);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-authorize_level (java.net.URLEncoder/encode "-" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config" "?authorize_level=" enc-authorize_level)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config", nil)
            q := req.URL.Query()
            q.Add("authorize_level", "-")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config?authorize_level=- HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("authorize_level", "-");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config';
        
        const params = new URLSearchParams({
          'authorize_level': '-'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        authorize_level =  - 
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("authorize_level", "-")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedAuthorize_level = [@"-" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config?authorize_level=%@", encodedAuthorize_level];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_authorize_level = Uri.pct_encode "-" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config" ^ "?authorize_level=" ^ enc_authorize_level) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            authorize_level = "-"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config"
        
        params <- list(
          authorize_level = "-"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/extensions/[EXTENSIONID]/config")!
        components.queryItems = [
            URLQueryItem(name: "authorize_level", value: "-")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        authorize_level : -

        Sample Response

        200{ "configs" : "[]" }
        Business Hours

        This module covers business hours related operations in Zoho Projects. Use this API to manage the business hours such as creating, updating or deleting the business hours.

        Get Business Hours

        Retrieve the list of business hours from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/business-hours

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description

        JSONObject

        Enter the filter criteria.

        sort_by

        String

        Enter the sort order.
        Accepted values: DESC(field_name),ASC(field_name)

        page

        int

        Enter the page number.

        per_page

        int

        Enter the number of entries to be displayed per page.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours?%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours";
        params = Map();
        params.put("filter", {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"});
        params.put("sort_by", "ASC(last_modified_time)");
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours');
        url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}');
        url.searchParams.append('sort_by', 'ASC(last_modified_time)');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")
        params = {
          ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}",
          "sort_by" => "ASC(last_modified_time)",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            '"filter"' => '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}',
            'sort_by' => 'ASC(last_modified_time)',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
        
        params = {
            ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}",
            "sort_by": "ASC(last_modified_time)",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}", 0);
                char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours?\"filter\"=%s&sort_by=%s&page=%s&per_page=%s", enc_"filter", enc_sort_by, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_"filter");
                curl_free(enc_sort_by);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}";
        query["sort_by"] = "ASC(last_modified_time)";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}", 0);
                char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours";
                url += "?"filter"=" + std::string(enc_"filter");
                url += "&sort_by=" + std::string(enc_sort_by);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_"filter");
                curl_free(enc_sort_by);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
              enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" "?"filter"=" enc-"filter" "&sort_by=" enc-sort_by "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours", nil)
            q := req.URL.Query()
            q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}")
            q.Add("sort_by", "ASC(last_modified_time)")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours?%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/business-hours");
        uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}");
        uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours';
        
        const params = new URLSearchParams({
          '"filter"': '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}',
          'sort_by': 'ASC(last_modified_time)',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        "filter" = {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}
        sort_by = "ASC(last_modified_time)"
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}")
            urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours?"filter"=%@&sort_by=%@&page=%@&per_page=%@", encoded"filter", encodedSort_by, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}" in
          let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" ^ "?"filter"=" ^ enc_"filter" ^ "&sort_by=" ^ enc_sort_by ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"]}],`"pattern`":`"1 AND 2`"}"
            sort_by = "ASC(last_modified_time)"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
        
        params <- list(
          "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}",
          sort_by = "ASC(last_modified_time)",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")!
        components.queryItems = [
            URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}"),
            URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        "filter" : { "criteria" : [ { "cfid" : "4000000000242", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ] } ], "pattern" : "1 AND 2" } sort_by : "ASC(last_modified_time)" page : "1" per_page : "10"

        Sample Response

        200{ "business_hours" : [ { "created_time" : "2024-10-04T06:52:16.246Z", "updated_time" : "2024-10-04T06:52:16.246Z", "working_hours_type" : "same_hours", "working_hours" : [ { "start_time" : "09:00", "end_time" : "18:00", "break_hours" : [ ], "id" : "4000000066055", "day" : "1" } ], "name" : "US Shift", "updated_by" : { "zpuid" : "4000000002379", "full_name" : "Matthew Hayes", "email" : "matthew.hayes@zylker.com", "zuid" : 22823316 }, "id" : "4000000066053", "is_default" : false, "created_by" : { "zpuid" : "4000000002379", "full_name" : "Matthew Hayes", "email" : "matthew.hayes@zylker.com", "zuid" : 22823316 }, "version" : "1", "effective_from" : "2022-10-01" } ], "page_info" : { "per_page" : 50, "has_next_page" : false, "page" : 1, "sort_by" : [ { "field_names" : [ "name" ], "order_by" : "ASCENDING" } ] } }
        Get Business Hour Details

        Retrieve details of the business hours using its ID.

        GET

        /api/v3/portal/[PORTALID]/business-hours/[BUSINESS-HOURID]

        OAuth Scope:

        ZohoProjects.portals.READ

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/business-hours/[BUSINESS-HOURID]");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "id" : "4000000169015", "name" : "US Shift", "working_hours_type" : "same_hours", "working_hours" : [ { "id" : "4000000169005", "day" : "1", "start_time" : "09:00", "end_time" : "18:00", "break_hours" : [ { "id" : "4000000169017", "start_time" : "13:15", "end_time" : "13:45", "minutes" : 30 } ] } ], "is_default" : false, "created_by" : { "zuid" : 22823316, "zpuid" : "4000000002379", "email" : "matthew.hayes@zylker.com", "full_name" : "Matthew Hayes" }, "created_time" : "2025-03-13T12:30:10.889Z", "updated_by" : { "zuid" : 22823316, "zpuid" : "4000000002379", "email" : "matthew.hayes@zylker.com", "full_name" : "Matthew Hayes" }, "updated_time" : "2025-03-13T12:30:10.889Z", "version" : "2", "effective_from" : "2025-03-13" }
        Get Users from Business Hours

        Retrieve the list of users associated to the business hours from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/business-hours/[BUSINESS-HOURID]/users

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        search_term

        String

        Enter the user details.

        skip_matching_users

        boolean

        Specify whether to exclude the matching users with the business hour.

        page

        int

        Enter the page number.

        per_page

        int

        Enter the number of entries to be displayed per page.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users?search_term=Zoho+Projects&skip_matching_users=true&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users";
        params = Map();
        params.put("search_term", "Zoho Projects");
        params.put("skip_matching_users", true);
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users');
        url.searchParams.append('search_term', 'Zoho Projects');
        url.searchParams.append('skip_matching_users', 'true');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users")
        params = {
          "search_term" => "Zoho Projects",
          "skip_matching_users" => "true",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'search_term' => 'Zoho Projects',
            'skip_matching_users' => 'true',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users"
        
        params = {
            "search_term": "Zoho Projects",
            "skip_matching_users": "true",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
                char *enc_skip_matching_users = curl_easy_escape(curl, "true", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users?search_term=%s&skip_matching_users=%s&page=%s&per_page=%s", enc_search_term, enc_skip_matching_users, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_search_term);
                curl_free(enc_skip_matching_users);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["search_term"] = "Zoho Projects";
        query["skip_matching_users"] = "true";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_search_term = curl_easy_escape(curl, "Zoho Projects", 0);
                char* enc_skip_matching_users = curl_easy_escape(curl, "true", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users";
                url += "?search_term=" + std::string(enc_search_term);
                url += "&skip_matching_users=" + std::string(enc_skip_matching_users);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_search_term);
                curl_free(enc_skip_matching_users);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-search_term (java.net.URLEncoder/encode "Zoho Projects" "UTF-8")
              enc-skip_matching_users (java.net.URLEncoder/encode "true" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users" "?search_term=" enc-search_term "&skip_matching_users=" enc-skip_matching_users "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users", nil)
            q := req.URL.Query()
            q.Add("search_term", "Zoho Projects")
            q.Add("skip_matching_users", "true")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users?search_term=Zoho+Projects&skip_matching_users=true&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/business-hours/[BUSINESS-HOURID]/users");
        uriBuilder.addParameter("search_term", "Zoho Projects");
        uriBuilder.addParameter("skip_matching_users", "true");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users';
        
        const params = new URLSearchParams({
          'search_term': 'Zoho Projects',
          'skip_matching_users': 'true',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        search_term = "Zoho Projects"
        skip_matching_users = true
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("search_term", "Zoho Projects")
            urlBuilder.addQueryParameter("skip_matching_users", "true")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedSearch_term = [@"Zoho Projects" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSkip_matching_users = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users?search_term=%@&skip_matching_users=%@&page=%@&per_page=%@", encodedSearch_term, encodedSkip_matching_users, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_search_term = Uri.pct_encode "Zoho Projects" in
          let enc_skip_matching_users = Uri.pct_encode "true" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users" ^ "?search_term=" ^ enc_search_term ^ "&skip_matching_users=" ^ enc_skip_matching_users ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            search_term = "Zoho Projects"
            skip_matching_users = "true"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users"
        
        params <- list(
          search_term = "Zoho Projects",
          skip_matching_users = "true",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users")!
        components.queryItems = [
            URLQueryItem(name: "search_term", value: "Zoho Projects"),
            URLQueryItem(name: "skip_matching_users", value: "true"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        search_term : "Zoho Projects" skip_matching_users : true page : "1" per_page : "10"

        Sample Response

        200{ "page_info" : { "per_page" : 50, "has_next_page" : false, "page" : 1 }, "users" : [ { "name" : "Monica", "id" : "4000000002379", "email" : "monica.hemsworth@zylker.com", "zuid" : "22823316" } ] }
        Create Business Hours

        Create a business calendar in the Zoho Projects portal.

        POST

        /api/v3/portal/[PORTALID]/business-hours

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 100

        Enter the business hours' name.

        JSONObject

        required
        max length : 100

        Enter the holiday list details to associate.

        working_hours

        JSONArray

        required
        max length : 10000
        array size : 0-7

        Enter the work hour details.

        working_hours_type

        String

        required

        Enter the work hours type.
        Accepted values: all_day,same_hours,different_hours

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours";
        params = Map();
        params.put("name", "India Shift");
        params.put("holiday", {"id":"4000000062001"});
        params.put("working_hours", [{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}]);
        params.put("working_hours_type", "same_hours");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours');
        
        const payload = JSON.stringify({"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
        request.Content = new StringContent(
            @"{""name"":""India Shift"",""holiday"":{""id"":""4000000062001""},""working_hours"":[{""start_time"":""09:00"",""end_time"":""18:00"",""day"":""1"",""break_hours"":[{""start_time"":""09:00"",""end_time"":""18:00""}]}],""working_hours_type"":""same_hours""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "India Shift", "holiday" : { "id" : "4000000062001" }, "working_hours" : [ { "start_time" : "09:00", "end_time" : "18:00", "day" : "1", "break_hours" : [ { "start_time" : "09:00", "end_time" : "18:00" } ] } ], "working_hours_type" : "same_hours" }

        Sample Response

        201{ "id" : "4000000169061", "name" : "MEA Shift", "working_hours_type" : "different_hours", "working_hours" : [ { "id" : "4000000169031", "day" : "1", "start_time" : "06:00", "end_time" : "14:15", "break_hours" : [ { "id" : "4000000169043", "start_time" : "08:00", "end_time" : "08:30", "minutes" : 30 } ] } ], "is_default" : false, "holiday" : { "id" : "4000000136035", "name" : "Pacific Holiday" }, "created_by" : { "zuid" : 22823316, "zpuid" : "4000000002379", "email" : "matthew.hayes@zylker.com", "full_name" : "Matthew Hayes" }, "created_time" : "2025-03-13T12:35:32.432Z", "updated_by" : { "zuid" : 22823316, "zpuid" : "4000000002379", "email" : "matthew.hayes@zylker.com", "full_name" : "Matthew Hayes" }, "updated_time" : "2025-03-13T12:35:32.432Z", "version" : "0", "effective_from" : "2025-03-13", "holiday_list_id" : "4000000136035" }
        Update Business Hours

        Modify the work hours by archiving the business hours and creating a new one in the Zoho Projects portal.

        PUT

        /api/v3/portal/[PORTALID]/business-hours

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        id

        long

        required

        Enter the business hours' ID.

        name

        String

        max length : 100

        Enter the business hours' name.

        JSONObject

        max length : 100

        Enter the holiday list details to associate.

        working_hours

        JSONArray

        max length : 10000
        array size : 0-7

        Enter the work hour details.

        working_hours_type

        String

        Enter the work hours type.
        Accepted values: all_day,same_hours,different_hours

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PUT \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours";
        params = Map();
        params.put("id", "4000000062001");
        params.put("name", "India Shift");
        params.put("holiday", {"id":"4000000062001"});
        params.put("working_hours", [{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}]);
        params.put("working_hours_type", "same_hours");
        response = invokeUrl
        [
            url: url
            type: PUT
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours');
        
        const payload = JSON.stringify({"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Put.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PUT",
          CURLOPT_POSTFIELDS => '{"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}'
        
        response = requests.put(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Put, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
        request.Content = new StringContent(
            @"{""id"":""4000000062001"",""name"":""India Shift"",""holiday"":{""id"":""4000000062001""},""working_hours"":[{""start_time"":""09:00"",""end_time"":""18:00"",""day"":""1"",""break_hours"":[{""start_time"":""09:00"",""end_time"":""18:00""}]}],""working_hours_type"":""same_hours""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PUT");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"id\":\"4000000062001\",\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/put "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"id\":\"4000000062001\",\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"id\":\"4000000062001\",\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}")
            req, _ := http.NewRequest("PUT", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PUT https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours");
        HttpUriRequest requestObj = new HttpPut(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"id\":\"4000000062001\",\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours';
        
        const options = {
          method: 'PUT',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PUT"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PUT"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"id\":\"4000000062001\",\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}|json} in
          Lwt_main.run (
            Client.put ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours" -Method PUT -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours"
        
        response <- PUT(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"id\":\"4000000062001\",\"name\":\"India Shift\",\"holiday\":{\"id\":\"4000000062001\"},\"working_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\",\"day\":\"1\",\"break_hours\":[{\"start_time\":\"09:00\",\"end_time\":\"18:00\"}]}],\"working_hours_type\":\"same_hours\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours")!
        var request = URLRequest(url: url)
        request.httpMethod = "PUT"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"id":"4000000062001","name":"India Shift","holiday":{"id":"4000000062001"},"working_hours":[{"start_time":"09:00","end_time":"18:00","day":"1","break_hours":[{"start_time":"09:00","end_time":"18:00"}]}],"working_hours_type":"same_hours"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "id" : "4000000062001", "name" : "India Shift", "holiday" : { "id" : "4000000062001" }, "working_hours" : [ { "start_time" : "09:00", "end_time" : "18:00", "day" : "1", "break_hours" : [ { "start_time" : "09:00", "end_time" : "18:00" } ] } ], "working_hours_type" : "same_hours" }

        Sample Response

        201{ "id" : "4000000136025", "name" : "Pacific Shift", "working_hours_type" : "different_hours", "working_hours" : [ { "id" : "4000000135045", "day" : "1", "start_time" : "09:00", "end_time" : "16:00" } ], "is_default" : false, "holiday" : { "id" : "4000000003000", "name" : "India Holiday" }, "created_by" : { "id" : "22823316", "zpuid" : "4000000002379", "full_name" : "Matthew Hayes" }, "created_time" : "2025-01-09T06:05:44.736Z", "updated_by" : { "id" : "22823316", "zpuid" : "4000000002379", "full_name" : "Matthew Hayes" }, "updated_time" : "2025-01-09T06:05:44.736Z", "version" : "1", "effective_from" : "2025-01-09" }
        Associate or Disassociate User

        Associate/disassociate user from the business hours.

        PATCH

        /api/v3/portal/[PORTALID]/business-hours/[BUSINESS-HOURID]/users

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description

        JSONArray

        max length : 10000

        Enter the user details to associate.

        JSONArray

        max length : 10000

        Enter the user details to dissociate.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users";
        params = Map();
        params.put("add", [{"zpuid":"4000000002055"}]);
        params.put("delete", [{"zpuid":"4000000002055"}]);
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users');
        
        const payload = JSON.stringify({"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"add\":[{\"zpuid\":\"4000000002055\"}],\"delete\":[{\"zpuid\":\"4000000002055\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users");
        request.Content = new StringContent(
            @"{""add"":[{""zpuid"":""4000000002055""}],""delete"":[{""zpuid"":""4000000002055""}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"add\":[{\"zpuid\":\"4000000002055\"}],\"delete\":[{\"zpuid\":\"4000000002055\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"add\":[{\"zpuid\":\"4000000002055\"}],\"delete\":[{\"zpuid\":\"4000000002055\"}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"add\":[{\"zpuid\":\"4000000002055\"}],\"delete\":[{\"zpuid\":\"4000000002055\"}]}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"add":[{"zpuid":"4000000002055"}],"delete":[{"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/business-hours/[BUSINESS-HOURID]/users");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"add\":[{\"zpuid\":\"4000000002055\"}],\"delete\":[{\"zpuid\":\"4000000002055\"}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"add\":[{\"zpuid\":\"4000000002055\"}],\"delete\":[{\"zpuid\":\"4000000002055\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"add\":[{\"zpuid\":\"4000000002055\"}],\"delete\":[{\"zpuid\":\"4000000002055\"}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/users")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"add":[{"zpuid":"4000000002055"}],"delete":[{"zpuid":"4000000002055"}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "add" : [ { "zpuid" : "4000000002055" } ], "delete" : [ { "zpuid" : "4000000002055" } ] }

        Sample Response

        200{ }
        Set Default Business Hours

        Set default business hours in the Zoho Projects portal.

        PATCH

        /api/v3/portal/[PORTALID]/business-hours/[BUSINESS-HOURID]/mark-as-default

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default";
        response = invokeUrl
        [
            url: url
            type: PATCH
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.patch(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/business-hours/[BUSINESS-HOURID]/mark-as-default");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.patch ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default" -Method PATCH -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]/mark-as-default")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        
        Delete Business Hours

        Remove a business calendar from the Zoho Projects portal.

        DELETE

        /api/v3/portal/[PORTALID]/business-hours/[BUSINESS-HOURID]

        OAuth Scope:

        ZohoProjects.portals.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/business-hours/[BUSINESS-HOURID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/business-hours/[BUSINESS-HOURID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        
        Holidays

        This module covers holidays related operations in Zoho Projects. Use this API to manage the holidays such as creating, updating or deleting the holidays.

        Get Holiday Lists

        Retrieve holiday lists from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/holiday-list

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description

        JSONObject

        Enter the filter criteria.

        sort_by

        String

        Enter the sort order.
        Accepted values: DESC(field_name),ASC(field_name)

        page

        int

        Enter the page number.

        per_page

        int

        Enter the number of entries to be displayed per page.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list?%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list";
        params = Map();
        params.put("filter", {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"});
        params.put("sort_by", "ASC(last_modified_time)");
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list');
        url.searchParams.append('"filter"', '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}');
        url.searchParams.append('sort_by', 'ASC(last_modified_time)');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list")
        params = {
          ""filter"" => "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}",
          "sort_by" => "ASC(last_modified_time)",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            '"filter"' => '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}',
            'sort_by' => 'ASC(last_modified_time)',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list"
        
        params = {
            ""filter"": "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}",
            "sort_by": "ASC(last_modified_time)",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}", 0);
                char *enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list?\"filter\"=%s&sort_by=%s&page=%s&per_page=%s", enc_"filter", enc_sort_by, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_"filter");
                curl_free(enc_sort_by);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query[""filter""] = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}";
        query["sort_by"] = "ASC(last_modified_time)";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_"filter" = curl_easy_escape(curl, "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}", 0);
                char* enc_sort_by = curl_easy_escape(curl, "ASC(last_modified_time)", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list";
                url += "?"filter"=" + std::string(enc_"filter");
                url += "&sort_by=" + std::string(enc_sort_by);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_"filter");
                curl_free(enc_sort_by);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-"filter" (java.net.URLEncoder/encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}" "UTF-8")
              enc-sort_by (java.net.URLEncoder/encode "ASC(last_modified_time)" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list" "?"filter"=" enc-"filter" "&sort_by=" enc-sort_by "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list", nil)
            q := req.URL.Query()
            q.Add(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}")
            q.Add("sort_by", "ASC(last_modified_time)")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list?%22filter%22=%7B%22criteria%22%3A%5B%7B%22cfid%22%3A%224000000000242%22%2C%22criteria_condition%22%3A%22contains%22%2C%22value%22%3A%5B%221752587000000097269%22%5D%7D%5D%2C%22pattern%22%3A%221+AND+2%22%7D&sort_by=ASC%28last_modified_time%29&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/holiday-list");
        uriBuilder.addParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}");
        uriBuilder.addParameter("sort_by", "ASC(last_modified_time)");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list';
        
        const params = new URLSearchParams({
          '"filter"': '{"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}',
          'sort_by': 'ASC(last_modified_time)',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        "filter" = {"criteria":[{"cfid":"4000000000242","criteria_condition":"contains","value":["1752587000000097269"]}],"pattern":"1 AND 2"}
        sort_by = "ASC(last_modified_time)"
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter(""filter"", "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}")
            urlBuilder.addQueryParameter("sort_by", "ASC(last_modified_time)")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encoded"filter" = [@"{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSort_by = [@"ASC(last_modified_time)" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list?"filter"=%@&sort_by=%@&page=%@&per_page=%@", encoded"filter", encodedSort_by, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_"filter" = Uri.pct_encode "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}" in
          let enc_sort_by = Uri.pct_encode "ASC(last_modified_time)" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list" ^ "?"filter"=" ^ enc_"filter" ^ "&sort_by=" ^ enc_sort_by ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            "filter" = "{`"criteria`":[{`"cfid`":`"4000000000242`",`"criteria_condition`":`"contains`",`"value`":[`"1752587000000097269`"]}],`"pattern`":`"1 AND 2`"}"
            sort_by = "ASC(last_modified_time)"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list"
        
        params <- list(
          "filter" = "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}",
          sort_by = "ASC(last_modified_time)",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list")!
        components.queryItems = [
            URLQueryItem(name: ""filter"", value: "{\"criteria\":[{\"cfid\":\"4000000000242\",\"criteria_condition\":\"contains\",\"value\":[\"1752587000000097269\"]}],\"pattern\":\"1 AND 2\"}"),
            URLQueryItem(name: "sort_by", value: "ASC(last_modified_time)"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        "filter" : { "criteria" : [ { "cfid" : "4000000000242", "criteria_condition" : "contains", "value" : [ "1752587000000097269" ] } ], "pattern" : "1 AND 2" } sort_by : "ASC(last_modified_time)" page : "1" per_page : "10"

        Sample Response

        200{ "page_info" : { "per_page" : 50, "has_next_page" : false, "page" : 1 }, "list_view_fields" : { "all" : [ { "is_removable" : true, "isLookupField" : false, "is_encrypted" : false, "is_custom_edit" : false, "column_name" : "BUSINESS_HOURS", "is_editable" : true, "is_default_field" : false, "is_resolution" : false, "display_name" : "Business Hours", "is_default" : true, "field_properties" : { }, "table_name" : "CustomGenerated", "is_default_unassociated" : false, "min_char" : 0, "cfid" : "85", "is_editform_only" : false, "is_pii" : false, "field_type_integer" : 0, "max_char" : 0, "data_type_integer" : 0, "field_type" : "multipicklist" } ], "column_size" : { }, "selected" : [ { "is_removable" : true, "isLookupField" : false, "is_encrypted" : false, "is_custom_edit" : false, "column_name" : "BUSINESS_HOURS", "is_editable" : true, "is_default_field" : false, "is_resolution" : false, "display_name" : "Business Hours", "is_default" : true, "field_properties" : { }, "table_name" : "CustomGenerated", "is_default_unassociated" : false, "min_char" : 0, "cfid" : "85", "is_editform_only" : false, "is_pii" : false, "field_type_integer" : 0, "max_char" : 0, "data_type_integer" : 0, "field_type" : "multipicklist" } ] }, "holiday_list" : [ { "created_time" : "2024-07-09T11:57:01.409Z", "updated_time" : "2024-07-09T11:57:01.409Z", "name" : "Chennai Local Holiday", "updated_by" : { "zpuid" : "4000000002379", "full_name" : "Matthew Hayes", "id" : "22823316" }, "associated_business_hours" : [ { "name" : "Old Business Hour", "id" : "4000000113001" } ], "id" : "4000000040001", "created_by" : { "zpuid" : "4000000002379", "full_name" : "Matthew Hayes", "id" : "22823316" }, "associated_business_hour_count" : "4" } ] }
        Get Holiday List Details

        Retrieve holiday list details using its ID.

        GET

        /api/v3/portal/[PORTALID]/holiday-list/[HOLIDAY-LISTID]

        OAuth Scope:

        ZohoProjects.portals.READ

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/holiday-list/[HOLIDAY-LISTID]");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "id" : "4000000040001", "name" : "Chennai Local Holiday", "created_by" : { "id" : "22823316", "zpuid" : "4000000002379", "full_name" : "Matthew Hayes" }, "updated_by" : { "id" : "22823316", "zpuid" : "4000000002379", "full_name" : "Matthew Hayes" }, "created_time" : "2024-07-09T11:57:01.409Z", "updated_time" : "2024-07-09T11:57:01.409Z", "associated_business_hours" : [ { "id" : "4000000113001", "name" : "Old Business Hour" } ] }
        Get Associated Business Hours

        Retrieve business hours associated with the holiday list.

        GET

        /api/v3/portal/[PORTALID]/holiday-list/[HOLIDAY-LISTID]/associated-business-hours

        OAuth Scope:

        ZohoProjects.portals.READ

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours";
        response = invokeUrl
        [
            url: url
            type: GET
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Get, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/get "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/holiday-list/[HOLIDAY-LISTID]/associated-business-hours");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours';
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours" -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours"
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/associated-business-hours")!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Response

        200{ "associated_business_hours" : [ { "name" : "Old Business Hour", "id" : "4000000113001" } ] }
        Get Holidays for a Year

        Retrieve holidays for the specified year from the Zoho Projects portal.

        GET

        /api/v3/portal/[PORTALID]/holiday-list/[HOLIDAY-LISTID]/holidays

        OAuth Scope:

        ZohoProjects.portals.READ

        Query Parameter

        Param Name
        Data Type
        Description
        year

        int

        Enter the year.

        page

        int

        Enter the page number.

        per_page

        int

        Enter the number of entries to be displayed per page.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays?year=2025&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays";
        params = Map();
        params.put("year", 2025);
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays');
        url.searchParams.append('year', '2025');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays")
        params = {
          "year" => "2025",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'year' => '2025',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays"
        
        params = {
            "year": "2025",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_year = curl_easy_escape(curl, "2025", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays?year=%s&page=%s&per_page=%s", enc_year, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_year);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["year"] = "2025";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_year = curl_easy_escape(curl, "2025", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays";
                url += "?year=" + std::string(enc_year);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_year);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-year (java.net.URLEncoder/encode "2025" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays" "?year=" enc-year "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays", nil)
            q := req.URL.Query()
            q.Add("year", "2025")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays?year=2025&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/holiday-list/[HOLIDAY-LISTID]/holidays");
        uriBuilder.addParameter("year", "2025");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays';
        
        const params = new URLSearchParams({
          'year': '2025',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        year = 2025
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("year", "2025")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedYear = [@"2025" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays?year=%@&page=%@&per_page=%@", encodedYear, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_year = Uri.pct_encode "2025" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays" ^ "?year=" ^ enc_year ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            year = "2025"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays"
        
        params <- list(
          year = "2025",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]/holidays")!
        components.queryItems = [
            URLQueryItem(name: "year", value: "2025"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        year : 2025 page : "1" per_page : "10"

        Sample Response

        200{ "holidays" : [ { "holiday_date" : "2025-08-15", "name" : "Independence Day", "id" : "140627000000695003", "holiday_list_id" : "140627000000608037" }, { "holiday_date" : "2025-12-25", "name" : "Christmas", "id" : "140627000000639007", "holiday_list_id" : "140627000000608037" } ], "page_info" : { "per_page" : 400, "has_next_page" : false, "page" : 1 } }
        Create a Holiday List

        Create a holiday list in the Zoho Projects portal.

        POST

        /api/v3/portal/[PORTALID]/holiday-list

        OAuth Scope:

        ZohoProjects.portals.CREATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 100

        Enter the holiday list name.

        JSONArray

        max length : 10000
        array size : 0-700

        Specify the holidays in the list.

        associated_business_hours

        JSONArray

        max length : 10000
        array size : 0-50

        Enter the business hours' details to associate.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list";
        params = Map();
        params.put("name", "Pacific Holiday");
        params.put("holidays", [{"name":"Pacific Holiday","holiday_date":"2025-08-15"}]);
        params.put("associated_business_hours", [{"id":"4000000062001"}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list');
        
        const payload = JSON.stringify({"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"associated_business_hours\":[{\"id\":\"4000000062001\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list");
        request.Content = new StringContent(
            @"{""name"":""Pacific Holiday"",""holidays"":[{""name"":""Pacific Holiday"",""holiday_date"":""2025-08-15""}],""associated_business_hours"":[{""id"":""4000000062001""}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"associated_business_hours\":[{\"id\":\"4000000062001\"}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"associated_business_hours\":[{\"id\":\"4000000062001\"}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"Pacific Holiday\",\"holidays\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"associated_business_hours\":[{\"id\":\"4000000062001\"}]}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"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/holiday-list");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"associated_business_hours\":[{\"id\":\"4000000062001\"}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"Pacific Holiday\",\"holidays\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"associated_business_hours\":[{\"id\":\"4000000062001\"}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"associated_business_hours\":[{\"id\":\"4000000062001\"}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"Pacific Holiday","holidays":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"associated_business_hours":[{"id":"4000000062001"}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "Pacific Holiday", "holidays" : [ { "name" : "Pacific Holiday", "holiday_date" : "2025-08-15" } ], "associated_business_hours" : [ { "id" : "4000000062001" } ] }

        Sample Response

        201{ "id" : "4000000136035", "name" : "Pacific Holiday", "created_time" : "2025-01-09T06:07:30.173Z", "updated_time" : "2025-01-09T06:07:30.173Z" }
        Update a Holiday List

        Modify the details of an holiday list in the Zoho Projects portal.

        PATCH

        /api/v3/portal/[PORTALID]/holiday-list/[HOLIDAY-LISTID]

        OAuth Scope:

        ZohoProjects.portals.UPDATE

        Parameter

        Param Name
        Data Type
        Description
        name

        String

        required
        max length : 100

        Enter the holiday list name.

        JSONArray

        max length : 10000
        array size : 0-700

        Specify the holidays in the list.

        associated_business_hours

        JSONArray

        max length : 10000
        array size : 0-50

        Enter the business hours' details.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X PATCH \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]";
        params = Map();
        params.put("name", "Pacific Holiday");
        params.put("holidays", [{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}]);
        params.put("associated_business_hours", [{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]);
        response = invokeUrl
        [
            url: url
            type: PATCH
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]');
        
        const payload = JSON.stringify({"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Patch.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "PATCH",
          CURLOPT_POSTFIELDS => '{"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}'
        
        response = requests.patch(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"add\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"update\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"delete\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}]}],\"associated_business_hours\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Patch, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
        request.Content = new StringContent(
            @"{""name"":""Pacific Holiday"",""holidays"":[{""add"":[{""name"":""Pacific Holiday"",""holiday_date"":""2025-08-15""}],""update"":[{""id"":""4000000062001"",""name"":""Pacific Holiday"",""holiday_date"":""2025-08-15""}],""delete"":[{""id"":""4000000062001"",""name"":""Pacific Holiday"",""holiday_date"":""2025-08-15""}]}],""associated_business_hours"":[{""add"":[{""id"":""4000000062001""}],""remove"":[{""id"":""4000000062001""}]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "PATCH");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"add\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"update\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"delete\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}]}],\"associated_business_hours\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/patch "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"add\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"update\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"delete\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}]}],\"associated_business_hours\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"name\":\"Pacific Holiday\",\"holidays\":[{\"add\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"update\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"delete\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}]}],\"associated_business_hours\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}]}]}")
            req, _ := http.NewRequest("PATCH", "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        PATCH https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"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/holiday-list/[HOLIDAY-LISTID]");
        HttpUriRequest requestObj = new HttpPatch(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"add\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"update\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"delete\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}]}],\"associated_business_hours\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}]}]}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]';
        
        const options = {
          method: 'PATCH',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "PATCH"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"PATCH"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"name\":\"Pacific Holiday\",\"holidays\":[{\"add\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"update\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"delete\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}]}],\"associated_business_hours\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}|json} in
          Lwt_main.run (
            Client.patch ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]" -Method PATCH -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
        
        response <- PATCH(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"name\":\"Pacific Holiday\",\"holidays\":[{\"add\":[{\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"update\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}],\"delete\":[{\"id\":\"4000000062001\",\"name\":\"Pacific Holiday\",\"holiday_date\":\"2025-08-15\"}]}],\"associated_business_hours\":[{\"add\":[{\"id\":\"4000000062001\"}],\"remove\":[{\"id\":\"4000000062001\"}]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "PATCH"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"name":"Pacific Holiday","holidays":[{"add":[{"name":"Pacific Holiday","holiday_date":"2025-08-15"}],"update":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}],"delete":[{"id":"4000000062001","name":"Pacific Holiday","holiday_date":"2025-08-15"}]}],"associated_business_hours":[{"add":[{"id":"4000000062001"}],"remove":[{"id":"4000000062001"}]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "name" : "Pacific Holiday", "holidays" : [ { "add" : [ { "name" : "Pacific Holiday", "holiday_date" : "2025-08-15" } ], "update" : [ { "id" : "4000000062001", "name" : "Pacific Holiday", "holiday_date" : "2025-08-15" } ], "delete" : [ { "id" : "4000000062001", "name" : "Pacific Holiday", "holiday_date" : "2025-08-15" } ] } ], "associated_business_hours" : [ { "add" : [ { "id" : "4000000062001" } ], "remove" : [ { "id" : "4000000062001" } ] } ] }
        Delete a Holiday List

        Remove a holiday list from the Zoho Projects portal.

        DELETE

        /api/v3/portal/[PORTALID]/holiday-list/[HOLIDAY-LISTID]

        OAuth Scope:

        ZohoProjects.portals.DELETE

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X DELETE \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]";
        response = invokeUrl
        [
            url: url
            type: DELETE
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Delete.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "DELETE",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.delete(url, headers=headers)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Delete, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "DELETE");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/delete "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
        )
        
        func main() {
            req, _ := http.NewRequest("DELETE", "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]", nil)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        DELETE https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID] HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/holiday-list/[HOLIDAY-LISTID]");
        HttpUriRequest requestObj = new HttpDelete(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]';
        
        const options = {
          method: 'DELETE',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "DELETE"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"DELETE"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.delete ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]" -Method DELETE -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]"
        
        response <- DELETE(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/holiday-list/[HOLIDAY-LISTID]")!
        var request = URLRequest(url: url)
        request.httpMethod = "DELETE"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        
        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

        Retrieve all blueprints configured in 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 to retrieve.

        per_page

        int

        Enter the number of records to display per page.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints?module_name=Task&page=1&per_page=10' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints";
        params = Map();
        params.put("module_name", "Task");
        params.put("page", "1");
        params.put("per_page", "10");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints');
        url.searchParams.append('module_name', 'Task');
        url.searchParams.append('page', '1');
        url.searchParams.append('per_page', '10');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints")
        params = {
          "module_name" => "Task",
          "page" => "1",
          "per_page" => "10"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'module_name' => 'Task',
            'page' => '1',
            'per_page' => '10',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints"
        
        params = {
            "module_name": "Task",
            "page": "1",
            "per_page": "10"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_module_name = curl_easy_escape(curl, "Task", 0);
                char *enc_page = curl_easy_escape(curl, "1", 0);
                char *enc_per_page = curl_easy_escape(curl, "10", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints?module_name=%s&page=%s&per_page=%s", enc_module_name, enc_page, enc_per_page);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_module_name);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["module_name"] = "Task";
        query["page"] = "1";
        query["per_page"] = "10";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_module_name = curl_easy_escape(curl, "Task", 0);
                char* enc_page = curl_easy_escape(curl, "1", 0);
                char* enc_per_page = curl_easy_escape(curl, "10", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints";
                url += "?module_name=" + std::string(enc_module_name);
                url += "&page=" + std::string(enc_page);
                url += "&per_page=" + std::string(enc_per_page);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_module_name);
                curl_free(enc_page);
                curl_free(enc_per_page);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-module_name (java.net.URLEncoder/encode "Task" "UTF-8")
              enc-page (java.net.URLEncoder/encode "1" "UTF-8")
              enc-per_page (java.net.URLEncoder/encode "10" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints" "?module_name=" enc-module_name "&page=" enc-page "&per_page=" enc-per_page)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints", nil)
            q := req.URL.Query()
            q.Add("module_name", "Task")
            q.Add("page", "1")
            q.Add("per_page", "10")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints?module_name=Task&page=1&per_page=10 HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("module_name", "Task");
        uriBuilder.addParameter("page", "1");
        uriBuilder.addParameter("per_page", "10");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints';
        
        const params = new URLSearchParams({
          'module_name': 'Task',
          'page': '1',
          'per_page': '10'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        module_name = "Task"
        page = "1"
        per_page = "10"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("module_name", "Task")
            urlBuilder.addQueryParameter("page", "1")
            urlBuilder.addQueryParameter("per_page", "10")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedModule_name = [@"Task" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPage = [@"1" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedPer_page = [@"10" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints?module_name=%@&page=%@&per_page=%@", encodedModule_name, encodedPage, encodedPer_page];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_module_name = Uri.pct_encode "Task" in
          let enc_page = Uri.pct_encode "1" in
          let enc_per_page = Uri.pct_encode "10" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints" ^ "?module_name=" ^ enc_module_name ^ "&page=" ^ enc_page ^ "&per_page=" ^ enc_per_page) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            module_name = "Task"
            page = "1"
            per_page = "10"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints"
        
        params <- list(
          module_name = "Task",
          page = "1",
          per_page = "10"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprints")!
        components.queryItems = [
            URLQueryItem(name: "module_name", value: "Task"),
            URLQueryItem(name: "page", value: "1"),
            URLQueryItem(name: "per_page", value: "10")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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" : "Andrew James", "name" : "Andrew James", "last_name" : "James", "id" : "18886299", "is_client_user" : false, "first_name" : "Andrew", "email" : "andrew.james@zylker.com" }, "id" : "11000000329033", "created_by" : { "zpuid" : "11000000002143", "full_name" : "Andrew James", "name" : "Andrew James", "last_name" : "James", "id" : "18886299", "is_client_user" : false, "first_name" : "Andrew", "email" : "andrew.james@zylker.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 Available Transitions

        Retrieve the list of transitions available to execute after the current transition in a blueprint

        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 record ID.

        module_name

        String

        required

        Enter the module name. Accepted value: Task

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions?entity_id=11000000000371&module_name=Task' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions";
        params = Map();
        params.put("entity_id", "11000000000371");
        params.put("module_name", "Task");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions');
        url.searchParams.append('entity_id', '11000000000371');
        url.searchParams.append('module_name', 'Task');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions")
        params = {
          "entity_id" => "11000000000371",
          "module_name" => "Task"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'entity_id' => '11000000000371',
            'module_name' => 'Task',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions"
        
        params = {
            "entity_id": "11000000000371",
            "module_name": "Task"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_entity_id = curl_easy_escape(curl, "11000000000371", 0);
                char *enc_module_name = curl_easy_escape(curl, "Task", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions?entity_id=%s&module_name=%s", enc_entity_id, enc_module_name);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_entity_id);
                curl_free(enc_module_name);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["entity_id"] = "11000000000371";
        query["module_name"] = "Task";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_entity_id = curl_easy_escape(curl, "11000000000371", 0);
                char* enc_module_name = curl_easy_escape(curl, "Task", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions";
                url += "?entity_id=" + std::string(enc_entity_id);
                url += "&module_name=" + std::string(enc_module_name);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_entity_id);
                curl_free(enc_module_name);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-entity_id (java.net.URLEncoder/encode "11000000000371" "UTF-8")
              enc-module_name (java.net.URLEncoder/encode "Task" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions" "?entity_id=" enc-entity_id "&module_name=" enc-module_name)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions", nil)
            q := req.URL.Query()
            q.Add("entity_id", "11000000000371")
            q.Add("module_name", "Task")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions?entity_id=11000000000371&module_name=Task HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("entity_id", "11000000000371");
        uriBuilder.addParameter("module_name", "Task");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions';
        
        const params = new URLSearchParams({
          'entity_id': '11000000000371',
          'module_name': 'Task'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        entity_id = "11000000000371"
        module_name = "Task"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("entity_id", "11000000000371")
            urlBuilder.addQueryParameter("module_name", "Task")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedEntity_id = [@"11000000000371" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedModule_name = [@"Task" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions?entity_id=%@&module_name=%@", encodedEntity_id, encodedModule_name];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_entity_id = Uri.pct_encode "11000000000371" in
          let enc_module_name = Uri.pct_encode "Task" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions" ^ "?entity_id=" ^ enc_entity_id ^ "&module_name=" ^ enc_module_name) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            entity_id = "11000000000371"
            module_name = "Task"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions"
        
        params <- list(
          entity_id = "11000000000371",
          module_name = "Task"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/next-transitions")!
        components.queryItems = [
            URLQueryItem(name: "entity_id", value: "11000000000371"),
            URLQueryItem(name: "module_name", value: "Task")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        entity_id : "11000000000371" module_name : "Task"
        Get During Transition Data

        Retrieve the list of actions configured to execute when a specific blueprint transition is performed.

        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 record ID.

        skip_bug_validation

        boolean

        Specify whether to skip issue validation during transition execution. By default, transitions cannot be executed if the associated task has open issues. Accepted values: true or false

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        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: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions";
        params = Map();
        params.put("entity_id", "11000000000371");
        params.put("skip_bug_validation", "true");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions');
        url.searchParams.append('entity_id', '11000000000371');
        url.searchParams.append('skip_bug_validation', 'true');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions")
        params = {
          "entity_id" => "11000000000371",
          "skip_bug_validation" => "true"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'entity_id' => '11000000000371',
            'skip_bug_validation' => 'true',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions"
        
        params = {
            "entity_id": "11000000000371",
            "skip_bug_validation": "true"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_entity_id = curl_easy_escape(curl, "11000000000371", 0);
                char *enc_skip_bug_validation = curl_easy_escape(curl, "true", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions?entity_id=%s&skip_bug_validation=%s", enc_entity_id, enc_skip_bug_validation);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_entity_id);
                curl_free(enc_skip_bug_validation);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["entity_id"] = "11000000000371";
        query["skip_bug_validation"] = "true";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_entity_id = curl_easy_escape(curl, "11000000000371", 0);
                char* enc_skip_bug_validation = curl_easy_escape(curl, "true", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions";
                url += "?entity_id=" + std::string(enc_entity_id);
                url += "&skip_bug_validation=" + std::string(enc_skip_bug_validation);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_entity_id);
                curl_free(enc_skip_bug_validation);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-entity_id (java.net.URLEncoder/encode "11000000000371" "UTF-8")
              enc-skip_bug_validation (java.net.URLEncoder/encode "true" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions" "?entity_id=" enc-entity_id "&skip_bug_validation=" enc-skip_bug_validation)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions", nil)
            q := req.URL.Query()
            q.Add("entity_id", "11000000000371")
            q.Add("skip_bug_validation", "true")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions?entity_id=11000000000371&skip_bug_validation=true HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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");
        uriBuilder.addParameter("entity_id", "11000000000371");
        uriBuilder.addParameter("skip_bug_validation", "true");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions';
        
        const params = new URLSearchParams({
          'entity_id': '11000000000371',
          'skip_bug_validation': 'true'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        entity_id = "11000000000371"
        skip_bug_validation = "true"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("entity_id", "11000000000371")
            urlBuilder.addQueryParameter("skip_bug_validation", "true")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedEntity_id = [@"11000000000371" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *encodedSkip_bug_validation = [@"true" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions?entity_id=%@&skip_bug_validation=%@", encodedEntity_id, encodedSkip_bug_validation];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_entity_id = Uri.pct_encode "11000000000371" in
          let enc_skip_bug_validation = Uri.pct_encode "true" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions" ^ "?entity_id=" ^ enc_entity_id ^ "&skip_bug_validation=" ^ enc_skip_bug_validation) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            entity_id = "11000000000371"
            skip_bug_validation = "true"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions"
        
        params <- list(
          entity_id = "11000000000371",
          skip_bug_validation = "true"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/during-actions")!
        components.queryItems = [
            URLQueryItem(name: "entity_id", value: "11000000000371"),
            URLQueryItem(name: "skip_bug_validation", value: "true")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        entity_id : "11000000000371" skip_bug_validation : "true"

        Sample Response

        200{ "fields" : [ { "during_field_type" : "0", "field_value" : [ { "id" : 93028000000213001, "value" : "Security Response 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 a specific transition within 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 record(task) ID.

        skip_bug_validation

        boolean

        Specify whether to skip issue validation during transition execution. By default, transitions cannot be executed if the associated task has open issues. Accepted values: true or false

        field_values

        JSONArray

        array size : 0-200

        Enter the field values to be updated during the blueprint transition.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute' \
        -H 'Authorization: Bearer 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"]}]}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute";
        params = Map();
        params.put("entity_id", "11000000000371");
        params.put("skip_bug_validation", "true");
        params.put("field_values", [{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]);
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute');
        
        const payload = JSON.stringify({"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"entity_id\":\"11000000000371\",\"skip_bug_validation\":\"true\",\"field_values\":[{\"id\":\"11000000000371\",\"value\":[1752587000000097269],\"is_days\":\"true\",\"attachment_ids\":[\"12345678987654321\"]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute");
        request.Content = new StringContent(
            @"{""entity_id"":""11000000000371"",""skip_bug_validation"":""true"",""field_values"":[{""id"":""11000000000371"",""value"":[1752587000000097269],""is_days"":""true"",""attachment_ids"":[""12345678987654321""]}]}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"entity_id\":\"11000000000371\",\"skip_bug_validation\":\"true\",\"field_values\":[{\"id\":\"11000000000371\",\"value\":[1752587000000097269],\"is_days\":\"true\",\"attachment_ids\":[\"12345678987654321\"]}]}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"entity_id\":\"11000000000371\",\"skip_bug_validation\":\"true\",\"field_values\":[{\"id\":\"11000000000371\",\"value\":[1752587000000097269],\"is_days\":\"true\",\"attachment_ids\":[\"12345678987654321\"]}]}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"entity_id\":\"11000000000371\",\"skip_bug_validation\":\"true\",\"field_values\":[{\"id\":\"11000000000371\",\"value\":[1752587000000097269],\"is_days\":\"true\",\"attachment_ids\":[\"12345678987654321\"]}]}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"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());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        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));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"entity_id\":\"11000000000371\",\"skip_bug_validation\":\"true\",\"field_values\":[{\"id\":\"11000000000371\",\"value\":[1752587000000097269],\"is_days\":\"true\",\"attachment_ids\":[\"12345678987654321\"]}]}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"entity_id\":\"11000000000371\",\"skip_bug_validation\":\"true\",\"field_values\":[{\"id\":\"11000000000371\",\"value\":[1752587000000097269],\"is_days\":\"true\",\"attachment_ids\":[\"12345678987654321\"]}]}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/blueprint/[BLUEPRINTID]/transition/[TRANSITIONID]/execute")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"entity_id":"11000000000371","skip_bug_validation":"true","field_values":[{"id":"11000000000371","value":[1752587000000097269],"is_days":"true","attachment_ids":["12345678987654321"]}]}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        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 specific custom function configured 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 the additional parameter key-value pairs required for the custom function execution.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        --form 'Custom Parameter = " custom values"'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute";
        params = Map();
        params.put("Custom Parameter", " custom values");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute');
        url.searchParams.append('Custom Parameter', ' custom values');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute")
        params = {
          "Custom Parameter" => " custom values"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'Custom Parameter' => ' custom values',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute"
        
        params = {
            "Custom Parameter": " custom values"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.post(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_Custom Parameter = curl_easy_escape(curl, " custom values", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute?Custom Parameter=%s", enc_Custom Parameter);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_Custom Parameter);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["Custom Parameter"] = " custom values";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Post, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_Custom Parameter = curl_easy_escape(curl, " custom values", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute";
                url += "?Custom Parameter=" + std::string(enc_Custom Parameter);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_Custom Parameter);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-Custom Parameter (java.net.URLEncoder/encode " custom values" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute" "?Custom Parameter=" enc-Custom Parameter)]
        (def response
          (client/post url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute", nil)
            q := req.URL.Query()
            q.Add("Custom Parameter", " custom values")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute?Custom+Parameter=+custom+values HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/customfunction/1752587000000097260/execute");
        uriBuilder.addParameter("Custom Parameter", " custom values");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute';
        
        const params = new URLSearchParams({
          'Custom Parameter': ' custom values'
        });
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        Custom Parameter = " custom values"
        
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("Custom Parameter", " custom values")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedCustom Parameter = [@" custom values" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute?Custom Parameter=%@", encodedCustom Parameter];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_Custom Parameter = Uri.pct_encode " custom values" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute" ^ "?Custom Parameter=" ^ enc_Custom Parameter) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.post ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            Custom Parameter = " custom values"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method POST -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute"
        
        params <- list(
          Custom Parameter = " custom values"
        )
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/automation/customfunction/1752587000000097260/execute")!
        components.queryItems = [
            URLQueryItem(name: "Custom Parameter", value: " custom values")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Custom Parameter : " custom values"

        Possible Errors

        RESOURCE_NOT_FOUND HTTP 404

        INVALID_PARAMETER_VALUE HTTP 400

        Bulk Read

        The Bulk Read API in Zoho Projects helps you retrieve large datasets without affecting your daily API call limits. It is ideal for scheduled or large-scale data exports.

        Note
        • Bulk read jobs are queued and processed one at a time. API response does not include the data immediately.
        • You can provide a URL that supports the HTTP POST method to receive a callback when the export is complete.
        • The exported data will be available as a downloadable CSV ZIP file.
        Working with Bulk Read
        Bulk Read for Module

        Send a POST request to initiate a bulk read job. Include the module name and the list of fields to export.

        Download the Result

        Once the export is complete, you will receive a status and download_url in the call back request. Use the download_url to download the ZIP file containing CSV exports.

        Limitations
        • Only one initial fetch is allowed per module per day.
        • A maximum of five sync fetch exports are allowed per module per day.
        • Only Admin profile users can access this API.
        • Exported files are available only for one day after completion.

        Get Bulk Read Fields

        Retrieve the field metadata for the specified modules from the Zoho Projects portal. The fields returned will be aggregated from all layouts of the selected modules.

        GET

        /api/v3/portal/[PORTALID]/bulk/export/fields

        OAuth Scope:

        ZohoProjects.bulk.READ

        Query Parameter

        Param Name
        Data Type
        Description
        module

        String

        required

        Enter the module names in a comma-separated list. Accepted values: projects,projects_comments,milestones,tasks,timesheets,bugs,users,teams,tags,milestone_invoice,portal_users,project_groups,portal_clients,project_clients,task_workhrs,project_group_users,task_status_timeline,custom_status,task_invoice,issue_comments,milestone_comments,issue_status_timeline,milestone_status_timeline

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X GET \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields?module=projects' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields";
        params = Map();
        params.put("module", "projects");
        response = invokeUrl
        [
            url: url
            type: GET
            parameters: params
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields');
        url.searchParams.append('module', 'projects');
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields")
        params = {
          "module" => "projects"
        }
        url.query = URI.encode_www_form(params)
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Get.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $params = [
            'module' => 'projects',
        ];
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields" . "?" . http_build_query($params);
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "GET",
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields"
        
        params = {
            "module": "projects"
        }
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
        }
        
        response = requests.get(url, headers=headers, params=params)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                char *enc_module = curl_easy_escape(curl, "projects", 0);
                char url[2048];
                snprintf(url, sizeof(url), "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields?module=%s", enc_module);
        
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url);
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_free(enc_module);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var query = HttpUtility.ParseQueryString(string.Empty);
        query["module"] = "projects";
        var uriBuilder = new UriBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields") { Query = query.ToString() };
        var request = new HttpRequestMessage(HttpMethod.Get, uriBuilder.Uri);
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                char* enc_module = curl_easy_escape(curl, "projects", 0);
                std::string url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields";
                url += "?module=" + std::string(enc_module);
        
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
                curl_easy_setopt(curl, CURLOPT_URL, url.c_str());
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "GET");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_free(enc_module);
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (let [enc-module (java.net.URLEncoder/encode "projects" "UTF-8")
              url (str "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields" "?module=" enc-module)]
        (def response
          (client/get url
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"}
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "net/url"
        )
        
        func main() {
            req, _ := http.NewRequest("GET", "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields", nil)
            q := req.URL.Query()
            q.Add("module", "projects")
            req.URL.RawQuery = q.Encode()
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        GET https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields?module=projects HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 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/bulk/export/fields");
        uriBuilder.addParameter("module", "projects");
        HttpUriRequest requestObj = new HttpGet(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields';
        
        const params = new URLSearchParams({
          'module': 'projects'
        });
        
        const options = {
          method: 'GET',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa'
          }
        };
        
        fetch(url + '?' + params.toString(), options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        module = "projects"
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val urlBuilder = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields".toHttpUrl().newBuilder()
            urlBuilder.addQueryParameter("module", "projects")
            val url = URL(urlBuilder.build().toString())
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "GET"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSString *encodedModule = [@"projects" stringByAddingPercentEncodingWithAllowedCharacters:[NSCharacterSet URLQueryAllowedCharacterSet]];
        NSString *urlString = [NSString stringWithFormat:@"https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields?module=%@", encodedModule];
        NSURL *url = [NSURL URLWithString:urlString];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"GET"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let enc_module = Uri.pct_encode "projects" in
          let uri = Uri.of_string ("https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields" ^ "?module=" ^ enc_module) in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
          in
          Lwt_main.run (
            Client.get ~headers uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        }
        
        $params = @{
            module = "projects"
        }
        $queryString = ($params.GetEnumerator() | ForEach-Object { "$($_.Key)=$([System.Uri]::EscapeDataString($_.Value))" }) -join "&"
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields" + "?" + $queryString
        
        $response = Invoke-RestMethod -Uri $url -Method GET -Headers $headers
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields"
        
        params <- list(
          module = "projects"
        )
        
        response <- GET(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          query = params
        )
        
        content(response, "text")
        
        import Foundation
        
        var components = URLComponents(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export/fields")!
        components.queryItems = [
            URLQueryItem(name: "module", value: "projects")
        ]
        let url = components.url!
        var request = URLRequest(url: url)
        request.httpMethod = "GET"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        module : "projects"

        Sample Response

        200{ "modules" : [ { "is_custom" : false, "display_name" : "Projects", "fields" : [ { "name" : "Project ID", "is_custom_field" : false, "key" : "project_id_df" } ], "module_name" : "projects" } ] }

        Possible Errors

        UNAUTHORIZED HTTP 400

        Create Bulk Read Job

        Create a bulk read job to export records of a module from the Zoho Projects portal.

        POST

        /api/v3/portal/[PORTALID]/bulk/export

        OAuth Scope:

        ZohoProjects.bulk.READ

        Parameter

        Param Name
        Data Type
        Description
        project_ids

        JSONArray

        array size : >=0

        Enter the project IDs.

        module_name

        String

        required

        Enter the module name. Accepted values: projects,projects_comments,milestones,tasks,timesheets,bugs,users,teams,tags,milestone_invoice,portal_users,project_groups,portal_clients,project_clients,task_workhrs,project_group_users,task_status_timeline,custom_status,task_invoice,issue_comments,milestone_comments,issue_status_timeline,milestone_status_timeline

        export_type

        String

        required

        Specify the export type. Accepted values: initialfetch syncfetch or deleted

        time_period

        String

        Enter the time period for 'syncfetch' export type. E.g. 2025-06-20T10:00:00Z

        follow_url

        String

        required

        Enter a valid callback URL to receive export completion status.

        fields

        String

        Enter the field names to include in the export in a comma separated list.

        Request Example

        Request Example cURL
        • cURL
        • Deluge
        • Node.js
        • Ruby
        • PHP
        • Python
        • C
        • C#
        • C++
        • Clojure
        • Go
        • HTTP
        • Java
        • JS Fetch
        • JSON
        • Kotlin
        • Objective-C
        • OCaml
        • PowerShell
        • R
        • Swift

        curl -X POST \
        'https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export' \
        -H 'Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa' \
        -H 'Content-Type: application/json' \
        -d '{"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}'

        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export";
        params = Map();
        params.put("project_ids", ["4000000012001"]);
        params.put("module_name", "projects");
        params.put("export_type", "syncfetch");
        params.put("time_period", "2025-06-20T10:00:00Z");
        params.put("follow_url", "https://projectsapi.zoho.com");
        params.put("fields", "project_id_df,project_name_df");
        response = invokeUrl
        [
            url: url
            type: POST
            parameters: params.toString()
            connection: "projects"
        ];
        info response;
        
        const https = require('https');
        const url = new URL('https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export');
        
        const payload = JSON.stringify({"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"});
        
        const options = {
          hostname: url.hostname,
          path: url.pathname + url.search,
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json',
            'Content-Length': Buffer.byteLength(payload)
          }
        };
        
        const req = https.request(options, (res) => {
          let data = '';
          res.on('data', (chunk) => { data += chunk; });
          res.on('end', () => { console.log(JSON.parse(data)); });
        });
        
        req.on('error', (err) => { console.error(err); });
        req.write(payload);
        req.end();
        
        require 'net/http'
        require 'uri'
        require 'json'
        
        url = URI("https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export")
        
        http = Net::HTTP.new(url.host, url.port)
        http.use_ssl = true
        
        request = Net::HTTP::Post.new(url)
        request["Authorization"] = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
        request["Content-Type"] = "application/json"
        request.body = '{"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}'
        
        response = http.request(request)
        puts response.read_body
        
        <?php
        $url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export";
        
        $curl = curl_init();
        
        curl_setopt_array($curl, [
          CURLOPT_URL => $url,
          CURLOPT_RETURNTRANSFER => true,
          CURLOPT_CUSTOMREQUEST => "POST",
          CURLOPT_POSTFIELDS => '{"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}',
          CURLOPT_HTTPHEADER => [
            "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type: application/json"
          ],
        ]);
        
        $response = curl_exec($curl);
        curl_close($curl);
        
        echo $response;
        
        import requests
        
        url = "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export"
        
        headers = {
            "Authorization": "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa",
            "Content-Type": "application/json",
        }
        
        payload = '{"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}'
        
        response = requests.post(url, headers=headers, data=payload)
        
        print(response.json())
        
        #include <stdio.h>
        #include <string.h>
        #include <curl/curl.h>
        
        int main(void) {
            CURL *curl = curl_easy_init();
            if (curl) {
                struct curl_slist *headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_ids\":[\"4000000012001\"],\"module_name\":\"projects\",\"export_type\":\"syncfetch\",\"time_period\":\"2025-06-20T10:00:00Z\",\"follow_url\":\"https://projectsapi.zoho.com\",\"fields\":\"project_id_df,project_name_df\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res != CURLE_OK)
                    fprintf(stderr, "curl failed: %s\n", curl_easy_strerror(res));
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        using System.Net.Http;
        using System.Text;
        using System.Web;
        
        var client = new HttpClient();
        client.DefaultRequestHeaders.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        var request = new HttpRequestMessage(HttpMethod.Post, "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export");
        request.Content = new StringContent(
            @"{""project_ids"":[""4000000012001""],""module_name"":""projects"",""export_type"":""syncfetch"",""time_period"":""2025-06-20T10:00:00Z"",""follow_url"":""https://projectsapi.zoho.com"",""fields"":""project_id_df,project_name_df""}",
            Encoding.UTF8,
            "application/json"
        );
        
        var response = await client.SendAsync(request);
        var body = await response.Content.ReadAsStringAsync();
        Console.WriteLine(body);
        
        #include <iostream>
        #include <string>
        #include <curl/curl.h>
        
        static size_t WriteCallback(void* contents, size_t size, size_t nmemb, std::string* output) {
            output->append((char*)contents, size * nmemb);
            return size * nmemb;
        }
        
        int main() {
            CURL* curl = curl_easy_init();
            if (curl) {
                std::string response;
                struct curl_slist* headers = NULL;
                headers = curl_slist_append(headers, "Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
                headers = curl_slist_append(headers, "Content-Type: application/json");
        
                curl_easy_setopt(curl, CURLOPT_URL, "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export");
                curl_easy_setopt(curl, CURLOPT_HTTPHEADER, headers);
                curl_easy_setopt(curl, CURLOPT_CUSTOMREQUEST, "POST");
                curl_easy_setopt(curl, CURLOPT_WRITEFUNCTION, WriteCallback);
                curl_easy_setopt(curl, CURLOPT_WRITEDATA, &response);
                curl_easy_setopt(curl, CURLOPT_POSTFIELDS, "{\"project_ids\":[\"4000000012001\"],\"module_name\":\"projects\",\"export_type\":\"syncfetch\",\"time_period\":\"2025-06-20T10:00:00Z\",\"follow_url\":\"https://projectsapi.zoho.com\",\"fields\":\"project_id_df,project_name_df\"}");
        
                CURLcode res = curl_easy_perform(curl);
                if (res == CURLE_OK)
                    std::cout << response << std::endl;
                else
                    std::cerr << curl_easy_strerror(res) << std::endl;
        
                curl_slist_free_all(headers);
                curl_easy_cleanup(curl);
            }
            return 0;
        }
        
        (require '[clj-http.client :as client])
        
        (def response
          (client/post "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export"
            {:headers {"Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
                        "Content-Type" "application/json"}
             :body "{\"project_ids\":[\"4000000012001\"],\"module_name\":\"projects\",\"export_type\":\"syncfetch\",\"time_period\":\"2025-06-20T10:00:00Z\",\"follow_url\":\"https://projectsapi.zoho.com\",\"fields\":\"project_id_df,project_name_df\"}"
             :as :json}))
        
        (println (:body response))
        
        package main
        
        import (
            "fmt"
            "io"
            "net/http"
            "strings"
        )
        
        func main() {
            payload := strings.NewReader("{\"project_ids\":[\"4000000012001\"],\"module_name\":\"projects\",\"export_type\":\"syncfetch\",\"time_period\":\"2025-06-20T10:00:00Z\",\"follow_url\":\"https://projectsapi.zoho.com\",\"fields\":\"project_id_df,project_name_df\"}")
            req, _ := http.NewRequest("POST", "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export", payload)
            req.Header.Add("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            req.Header.Add("Content-Type", "application/json")
        
            resp, _ := http.DefaultClient.Do(req)
            defer resp.Body.Close()
            body, _ := io.ReadAll(resp.Body)
            fmt.Println(string(body))
        }
        
        POST https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export HTTP/1.1
        Host: projectsapi.zoho.com
        Authorization: Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa
        Content-Type: application/json
        
        {"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}
        
        HttpClientBuilder httpClientBuilder = HttpClientBuilder.create();
        
        SSLContext sslContext = SSLContext.getDefault();
        SSLConnectionSocketFactory sslConnectionSocketFactory = new SSLConnectionSocketFactory(sslContext, NoopHostnameVerifier.INSTANCE);
        CloseableHttpClient httpclient = httpClientBuilder.setSSLSocketFactory(sslConnectionSocketFactory).build();
        
        URIBuilder uriBuilder = new URIBuilder("https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export");
        HttpUriRequest requestObj = new HttpPost(uriBuilder.build());
        requestObj.addHeader("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa");
        
        HttpEntityEnclosingRequestBase requestBase = (HttpEntityEnclosingRequestBase) requestObj;
        String requestBody = "{\"project_ids\":[\"4000000012001\"],\"module_name\":\"projects\",\"export_type\":\"syncfetch\",\"time_period\":\"2025-06-20T10:00:00Z\",\"follow_url\":\"https:\/\/projectsapi.zoho.com\",\"fields\":\"project_id_df,project_name_df\"}";
        requestBase.setEntity(new StringEntity(requestBody, HTTP.UTF_8));
        
        HttpResponse response = httpclient.execute(requestObj);
        
        HttpEntity responseEntity = response.getEntity();
        Object responseObject = EntityUtils.toString(responseEntity);
        String responseString = responseObject.toString();
        
        const url = 'https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export';
        
        const options = {
          method: 'POST',
          headers: {
            'Authorization': 'Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa',
            'Content-Type': 'application/json'
          },
          body: JSON.stringify({"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"})
        };
        
        fetch(url, options)
          .then(response => response.json())
          .then(data => console.log(data))
          .catch(error => console.error(error));
        
        {"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}
        import java.net.HttpURLConnection
        import java.net.URL
        import okhttp3.HttpUrl.Companion.toHttpUrl
        
        fun main() {
            val url = URL("https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export")
            val conn = url.openConnection() as HttpURLConnection
            conn.requestMethod = "POST"
            conn.setRequestProperty("Authorization", "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa")
            conn.setRequestProperty("Content-Type", "application/json")
            conn.doOutput = true
            conn.outputStream.bufferedWriter().use { it.write("""{"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}""") }
        
            val response = conn.inputStream.bufferedReader().readText()
            println(response)
        }
        
        NSURL *url = [NSURL URLWithString:@"https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export"];
        NSMutableURLRequest *request = [NSMutableURLRequest requestWithURL:url];
        [request setHTTPMethod:@"POST"];
        [request setValue:@"Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa" forHTTPHeaderField:@"Authorization"];
        [request setValue:@"application/json" forHTTPHeaderField:@"Content-Type"];
        NSData *body = [@"{\"project_ids\":[\"4000000012001\"],\"module_name\":\"projects\",\"export_type\":\"syncfetch\",\"time_period\":\"2025-06-20T10:00:00Z\",\"follow_url\":\"https://projectsapi.zoho.com\",\"fields\":\"project_id_df,project_name_df\"}" dataUsingEncoding:NSUTF8StringEncoding];
        [request setHTTPBody:body];
        
        NSURLSession *session = [NSURLSession sharedSession];
        NSURLSessionDataTask *task = [session dataTaskWithRequest:request
            completionHandler:^(NSData *data, NSURLResponse *response, NSError *error) {
                NSString *result = [[NSString alloc] initWithData:data encoding:NSUTF8StringEncoding];
                NSLog(@"%@", result);
        }];
        [task resume];
        
        open Lwt
        open Cohttp_lwt_unix
        
        let () =
          let uri = Uri.of_string "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export" in
          let headers = Cohttp.Header.init ()
            |> fun h -> Cohttp.Header.add h "Authorization" "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            |> fun h -> Cohttp.Header.add h "Content-Type" "application/json"
          in
          let body = Cohttp_lwt.Body.of_string {json|{"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}|json} in
          Lwt_main.run (
            Client.post ~headers ~body uri >>= fun (_, body) ->
            Cohttp_lwt.Body.to_string body >|= fun s ->
            print_endline s)
        
        $headers = @{
            "Authorization" = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"
            "Content-Type" = "application/json"
        }
        
        $body = @'
        {"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}
        '@
        
        $response = Invoke-RestMethod -Uri "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export" -Method POST -Headers $headers -Body $body
        
        $response | ConvertTo-Json
        
        library(httr)
        
        url <- "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export"
        
        response <- POST(
          url,
          add_headers(Authorization = "Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa"),
          content_type_json(),
          body = "{\"project_ids\":[\"4000000012001\"],\"module_name\":\"projects\",\"export_type\":\"syncfetch\",\"time_period\":\"2025-06-20T10:00:00Z\",\"follow_url\":\"https://projectsapi.zoho.com\",\"fields\":\"project_id_df,project_name_df\"}"
        )
        
        content(response, "text")
        
        import Foundation
        
        let url = URL(string: "https://projectsapi.zoho.com/api/v3/portal/739121528/bulk/export")!
        var request = URLRequest(url: url)
        request.httpMethod = "POST"
        request.setValue("Bearer 1000.03xxxxxxxxxxxxxxxxxa5317.dxxxxxxxxxxxxxxxxxfa", forHTTPHeaderField: "Authorization")
        request.setValue("application/json", forHTTPHeaderField: "Content-Type")
        request.httpBody = """
        {"project_ids":["4000000012001"],"module_name":"projects","export_type":"syncfetch","time_period":"2025-06-20T10:00:00Z","follow_url":"https://projectsapi.zoho.com","fields":"project_id_df,project_name_df"}
        """.data(using: .utf8)
        
        let semaphore = DispatchSemaphore(value: 0)
        let task = URLSession.shared.dataTask(with: request) { data, response, error in
            if let data = data, let result = String(data: data, encoding: .utf8) {
                print(result)
            }
            semaphore.signal()
        }
        task.resume()
        semaphore.wait()
        

        Sample Input

        Content-Type: application/json
        { "project_ids" : [ "4000000012001" ], "module_name" : "projects", "export_type" : "syncfetch", "time_period" : "2025-06-20T10:00:00Z", "follow_url" : "https://projectsapi.zoho.com", "fields" : "project_id_df,project_name_df" }

        Sample Response

        202

        Possible Errors

        LIMIT_REACHED HTTP 403

        TIME_PERIOD_EXCEED HTTP 403

        FORBIDDEN HTTP 403

        UNAUTHORIZED HTTP 401

        ChatGPT Open in ChatGPT
        Claude Open in Claude
        Copy YAML
        View as YAML
        Download YAML